1. 程式人生 > >今日頭條2017計算機實習生c++第一道題

今日頭條2017計算機實習生c++第一道題

1、記不清楚了,大體意思就是給一個數組大小n,然後給n個數,組成一個離散序列,就是求極大值所在的族大區間,將這個最大區間的左側和右側座標x值輸出。

例如:

輸入:

n

n長度的整數陣列

輸出:

區間的範圍

樣例:

10 

1 3 1 2 5 4 3 1 9 10

樣例輸出:

2 7

程式碼:

#include<iostream>
#include<vector>
using namespace std;
struct MyStruct
{
	int leftx;
	int righty;
	int length;

};
bool operator>(const MyStruct &a, const MyStruct &b)
{
		return (a.length > b.length) ? true : false;
}
int main()
{
	MyStruct data;
	MyStruct datatemp;
	int n = 0;
	cin >> n;
	int temp0,temp1;
	bool flag0, flag1;
	flag0 = flag1 = false;
	cin >> temp0;
	for (size_t i = 1; i < n; i++)
	{
		cin >> temp1;
		if (temp1>temp0)
		{
			if (flag0 == false)
			{
				flag0 = true;
				datatemp.leftx = i-1;
				datatemp.righty = 0;
				datatemp.length = 0;
			}
			else
			{
				if (flag1==true)
				{
					datatemp.righty = i-1;
					datatemp.length = datatemp.righty - datatemp.leftx;
					if (datatemp>data)
					{
						data = datatemp;
					}
					datatemp.leftx = i-1;
					datatemp.righty = 0;
					datatemp.length = 0;
					flag0=true;
					flag1 = false;
				}
			}

		}
		else
		{
			if (flag0==true)
			{
				flag1 = true;
			}
		}
		temp0 = temp1;
	}
	cout << data.leftx << ' ' << data.righty;

	return 0;
}