剑指 Offer II 012. 左右两边子数组的和相等(724. 寻找数组的中心下标 & 1991. 找到数组的中间位置)

题目:

 

 

 

 

 

 

思路:

【1】先汇总再计算,先得到总数,再根据左边的累加数*2+当前值如果等于总数即判断成功。

代码展示:

先汇总再计算:

//时间0 ms击败100%
//内存42 MB击败73%
//时间复杂度:O(n),其中 n 为数组的长度。
//空间复杂度:O(1)
class Solution {
    public int pivotIndex(int[] nums) {
        int n = nums.length, sum = 0, leftSum = 0;
        for(int num : nums) sum += num;
        for(int i = 0; i < n; i++){
            if(leftSum * 2 + nums[i] == sum) return i;
            leftSum += nums[i];
        }
        return -1;
    }
}

使用辅助空间的方式:

//时间1 ms击败73.48%
//内存42.1 MB击败64.16%
class Solution {
    public int pivotIndex(int[] nums) {
        int n = nums.length;
        int[] pre = new int[n + 1];
        for(int i = 1; i <= n; i++){
            pre[i] = pre[i - 1] + nums[i - 1];
        }
        for(int i = 0; i < n; i++){
            if(pre[i] * 2 + nums[i] == pre[n]) return i;
        }
        return -1;
    }
}

 

posted @ 2023-02-28 17:32  忧愁的chafry  阅读(15)  评论(0编辑  收藏  举报