求数组(只有正数)中元素和为K的最长子数组的长度

来源:互联网 发布:Python 二进制到十进制 编辑:程序博客网 时间:2024/05/06 00:19

题目:来自脑客爱刷题

给定一个数组arr,该数组无序且每个元素均为正数;在给定一个正数K,求arr所有子数组中所有元素相加和为K的最长子数组长度。
例如:
arr:1,2,1,1,1
K:3
结果返回3

解法要求:时间复杂度O(N),额外空间复杂度O(1)

int getSumKMaxSubArrayLen(int* num, int length, int k){if (num == nullptr || length <= 0 || k <= 0)return -1;int len = -1, sum = num[0], left = 0, right = 0;while (right < length)//left可能在right的右边一位,但不影响本题结果{if (sum == k){if (right - left + 1>len)len = right - left + 1;sum -= num[left];left++;}else if (sum < k){right++;if (right >= length)//检查是否越界break;sum += num[right];}else{sum -= num[left];left++;}}return len;}


0 0
原创粉丝点击