给定一个包含 非负数 的数组和一个目标 整数 k ,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n * k ,其中 n 也是一个整数。
前缀和,java:
class Solution {
public int pivotIndex(int[] nums) {
int len = nums.length;
int left = 0;
//java 6ms: int sum = Arrays.stream(nums).sum();
// c++ :int total = accumulate(nums.begin(), nums.end(), 0);
//2ms
for(int i = 0; i < len; i++) {
sum += nums[i];
}
for(int j = 0; j < len; j++) {
if (2 * left == sum - nums[j]) {
return j;
}
left += nums[j];
}
return -1;
}
}
为什么不能用双指针。。⊙ω⊙ 🤪
双指针,c++:
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int len = nums.size();
int j = len - 1;
int i = 0;
int left = nums[i];
int right = nums[j];
while(i < j) {
if (left == right && i + 2 == j) {
return i + 1;
} else if (left > right) {
j--;
right += nums[j];
} else if (left < right){
i++;
left += nums[i];
}
}
return -1;
}
};