原题
https://leetcode-cn.com/problems/find-pivot-index/

思路
前缀和:即先求出数组的总和,然后判断【依次叠加和】 与 【总和依次相减】 相等
题解
package com.leetcode.code;
/**
* @ClassName Code724
* @Author ZK
* @Description
* @Date 2021/1/28 14:23
* @Version 1.0
**/
public class Code724 {
public static void main(String[] args) {
int[] nums = {1,1,1,1,1,0};
int index = pivotIndex(nums);
System.out.println(index);
}
// 前缀和
public static int pivotIndex(int[] nums) {
int len = nums.length;
int sum1 = 0;
for (int i = 0; i < len; i++) {
sum1 += nums[i];
}
int sum2 = 0;
for (int i = 0; i < len; i++) {
sum2 += nums[i];
// 此时i的位置便是中心索引位置,左右两边都累加了中间值
if (sum2 == sum1) {
return i;
}
sum1 -= nums[i];
}
return -1;
}
// 之前采用双指针法,对于有负数的情况失效。故放弃
public static int pivotIndex0(int[] nums) {
int res = -1;
int left = 0;
int right = nums.length-1;
int leftSum = nums[left];
int rightSum = nums[right];
while(left < right){
if (leftSum > rightSum) {
right--;
rightSum += nums[right];
} else if (leftSum < rightSum) {
left++;
leftSum += nums[left];
} else {
if (nums[left+1] < nums[right-1]){
left++;
leftSum += nums[left];
} else if (nums[left+1] > nums[right-1]){
right--;
rightSum += nums[right];
} else {
left++;
leftSum += nums[left];
right--;
rightSum += nums[right];
}
}
}
if (leftSum == rightSum) {
res = left == right ? left : -1;
}
return res;
}
}
该博客主要讨论了LeetCode中的724题——找到数组的中心索引。作者通过两种方法解决了这个问题:前缀和法和双指针法。前缀和法是先计算数组总和,然后判断依次叠加和与总和相减是否相等,从而找到中心索引。双指针法则尝试平衡左右两侧的和,但针对包含负数的情况可能失效。博客提供了详细的代码实现和思路解析。
999

被折叠的 条评论
为什么被折叠?



