20210128 寻找数组的中心索引
给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。 数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。 注意:中心索引可能出现在数组的两端。 示例 1: 输入:nums = [1, 7, 3, 6, 5, 6] 输出:3 解释: 索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (5 + 6 = 11) 相等。 同时, 3 也是第一个符合要求的中心索引。 示例 2: 输入:nums = [1, 2, 3] 输出:-1 解释: 数组中不存在满足此条件的中心索引。 示例 3: 输入:nums = [2, 1, -1] 输出:0 解释: 索引 0 左侧不存在元素,视作和为 0 ;右侧数之和为 1 + (-1) = 0 ,二者相等。 示例 4: 输入:nums = [0, 0, 0, 0, 1] 输出:4 解释: 索引 4 左侧数之和为 0 ;右侧不存在元素,视作和为 0 ,二者相等。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-pivot-index 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 public int pivotIndex(int[] nums) { }
思路:分别从左至右遍历和与从右至左遍历和对比 若左边大则右边加1个数对比 依次判断是否相等
这思路太傻了 看官方解答的另一个思路
官方:遍历所有元素 定义左边和sum 总和total 那么sum=total−nums[i]−sum => 2×sum+nums[i]=total
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; }
遇到这种类型题先列个草稿 尽量得到公式再进行代码编写