头条面试题——找出最大的连续的子数组

对于n个元素,有正有负,输出最大的连续的子数组


vector<int> findMaxSubstr(vector<int> arr)
{
	vector<int> result;

	int n = arr.size();
	if (n == 0)
		return result;
	if (n == 1)
	{
		result.push_back(arr[0]);
		return result;
	}
	result.push_back(-1);
	cout << "push进去一个负数" << endl;
	arr.push_back(-1);
	n++;
	vector<int> temp;
	for (int i = 0; i < n; i++)
	{
		if (arr[i] == 0 && temp.size() == 0)
			continue;	
		
		if (arr[i] >= 0)
		{
			temp.push_back(arr[i]);
		}
		
		else//当arr是负数时
		{
			cout << "遇到负数" << endl;
			for (int k = 0; k < temp.size(); k++)
				cout << temp[k] << " ";
			cout << endl;

			if (temp.size() > result.size())
			{
				result.clear();
				result.assign(temp.begin(), temp.end());
			}
				
			if (temp.size() == result.size())
			{
				//cout << "遇到长度相同的子串:" << endl;
				int p = 0, q = 0;
				while (p < temp.size() && temp[p]==result[q])
				{
					p++; q++;
				}
				if (p != temp.size()&&temp[p]>result[q])
				{
					result.clear();
					result.assign(temp.begin(), temp.end());
				}
			}
			temp.clear();
		}
	}

	return result;

}


int main()
{
    
	vector<int> arr = {1};
	vector<int> result = findMaxSubstr(arr);
	for (int i = 0; i < result.size(); i++)
		cout << result[i] << " ";
	cout << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/eereere/article/details/80327857