输入:int 型数组由正数、负数、0组成
输出:最长和为0的子序列
分析:
1)连续子串
2)非连续子串
void findTargetLen1(vector<int>nums,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;i<nums.size();i++)
{
findTargetLen1(nums, sum - nums[i], len - 1, maxLen, start+1);//减掉这个数
findTargetLen1(nums, sum, len, maxLen, start+1);//不减这个数
}
}
int findTargetLen2(vector<int>nums)
{
//连续最长子串
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()
{