724. 寻找数组的中心下标

149 阅读1分钟

724. 寻找数组的中心下标

给定一个包含 非负数 的数组和一个目标 整数 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;
    }
};