算法:子数组最大长度

给定一个正整数组成的无序数组arr,给定一个正整数值k,找到arr的
所有子数组里,哪个子数组的累加和等于k,并且是长度最大的,返回其长度

思路:
本题也是滑动窗口,和上一篇说的绳子问题类似。遍历数组arr,以i为开头的子数组,右边界为right,和为sum,如果子数组和小于k则right++,否则停下。判断sum是否等于k,如果等于,则比较大小,大数作为答案。如果大于,则继续遍历下一个i

代码:

int subArrayMaxLength(vector<int> &arr, int k) {
    int ans = 0, sum = 0, right = 0;
    for(int i = 0;i < arr.size();i++) {
        while (right < arr.size() && sum < k) {
            right++;
            sum += arr[right - 1];
        }
        if (sum == k) {
            ans = max(ans, right - i);
        }
        sum -= arr[i];
    }
    return ans;
}