算法编程-求数组中和为0的最长子串(非连续最长子串+连续最长子串)

输入:int 型数组由正数、负数、0组成

输出:最长和为0的子序列

分析:

1)连续子串

2)非连续子串

void findTargetLen1(vectornums,int sum,int len,int& maxLen,int start)
{
//非连续子串长度
	if (start == nums.size())
		return;
	if (sum == 0)
		maxLen = max(len, maxLen);//求和为0最大子串长度
	for (int i =start;inums)
{
//连续最长子串
	int res = 0;
	for (int i = 1; i < nums.size(); i++)
	{
		if (nums[i] == 0 || nums[i - 1] == 0) res = 1;
		nums[i] = nums[i] + nums[i - 1];
	}
	for (int i=nums.size()-1;i>0;i--)
		for (int j = i - 1; j >= 0; j--)
			if (nums[j] == nums[i])res = max(res, i - j);
	return res;
}
int main()
{
	int n;
	cin >> n;
	int sum = 0;
	vectornums(n);
	for (int i = 0; i < n; i++)
	{
		cin >> nums[i];
		sum += nums[i];
	}
	int len = nums.size();
	int maxlen = 0;
	findTargetLen1(nums, sum, len, maxlen, 0);    
	cout << maxlen << endl;
	cout << findTargetLen2(nums) << endl;
	system("pause");
	return 0;
}

欢迎交流

你可能感兴趣的:(编程题目)