剑指 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; } }