题解 | #相等的草堆# java
相等的草堆
https://www.nowcoder.com/practice/0e2f3b27bbdc45fcbc70cc4fd41e15fe
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int pivotIndex (int[] nums) { // write code here int start = 0; int end = nums.length - 1; int leftSum = 0; int rightSum = 0; while (start <= end) { if (leftSum < rightSum) { leftSum += nums[start]; start++; } else if (leftSum > rightSum) { rightSum += nums[end]; end--; } else { leftSum += nums[start]; rightSum += nums[end]; start++; end--; } } return leftSum == rightSum ? start - 1 : -1; } }
使用的是Java语言。
该题考察的知识点是数组的操作和双指针思想。
代码的文字解释如下:
- 在
pivotIndex()
方法中,我们使用了双指针的思想。首先,定义两个指针start
和end
,分别指向数组的起始位置和结束位置。同时,定义两个变量leftSum
和rightSum
来记录左侧和右侧元素的和。 - 在循环中,根据
leftSum
和rightSum
的大小关系更新指针和累加和。如果leftSum
小于rightSum
,说明需要将左侧的指针右移,并将对应元素的值加到leftSum
中。如果leftSum
大于rightSum
,说明需要将右侧的指针左移,并将对应元素的值加到rightSum
中。如果leftSum
等于rightSum
,则同时更新左侧和右侧的指针,并将对应元素的值加到对应的累加和中。 - 判断
leftSum
是否等于rightSum
,如果相等,则返回左侧指针start - 1
的值,表示找到了中心索引;否则,返回-1,表示未找到中心索引。