【题目】
未排序正数数组中累加和为给定值的最长字数组长度。
给定一个arr,无序,但每个元素都为正数,再给定一个整数k。求arr的所有子数组中所有元素相加和为k的最长字数组长度。
【举例】
arr=[1,2,1,1,1],k=3
最长字数组为[1,1,1],所以返回3
【代码】
// 未排序正数数组中累加和为给定值的最长字数组长度
private static int getMaxLength(int[] arr, int k) {
if (arr == null || arr.length == 0 || k <= 0) {
return 0;
}
int sum = 0;//子数组累加和
int left = 0;//子数组左端
int right = 0;//子数组右端
int len = 0;//符合条件的子数组长度
while (right < arr.length) {
if (sum == k) {
len = Math.max(len, right - left + 1);
sum -= arr[left++];// 考察left后面的子数组
} else if (sum < k) {
right++;
if (right == arr.length) {
break;
}
sum += arr[right];
} else
// sum>k
sum -= arr[left++];
}
return len;
}
探讨了如何在一个未排序的正数数组中找到所有可能的子数组,这些子数组的元素之和等于给定值k,并寻找这些子数组中最长的一个。
910

被折叠的 条评论
为什么被折叠?



