2021/1/28 寻找数组的中心索引
题干:
给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。
数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。
注意:中心索引可能出现在数组的两端。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-pivot-index
链接:https://leetcode-cn.com/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-zhong-xin-suo-yin-by-gzjle/
我的解题代码:
class Solution { public int pivotIndex(int[] nums) { int total = 0; int sum = 0; for(int i=0;i<nums.length;i++){ total+=nums[i]; } for(int i=0;i<nums.length;i++) { if(2*sum+nums[i]==total) { return i; }else{ sum+=nums[i]; } } return -1; } }
官方代码:
class Solution { public int pivotIndex(int[] nums) { int total = Arrays.stream(nums).sum(); int sum = 0; for (int i = 0; i < nums.length; ++i) { if (2 * sum + nums[i] == total) { return i; } sum += nums[i]; } return -1; } }
不一样的原因:
官方使用了Arrays.stream(nums).sum()的方式来计算total,而不是用for循环
收获:
当涉及到多个变量时(例如左边的和、右边的和),我们可以看看变量之间是否有联系,本题就是左右两边之和再加上分割的那个数,即为total(感觉类似数学遇到多个变量时的解决方式,那就是统一变量)