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
for (int i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
int x = -1;
for (int j = 0; j < nums.length; j++) {
int m = j > 0 ? nums[j - 1] : 0;
int n = j < nums.length - 1 ? nums[nums.length - 1] - nums[j] : 0;
if (n == m)
x = j;
}
return x;
}
}
该代码使用的编程语言是Java。
该题考察的是数组操作和逻辑判断
代码中的解决思路是通过两次遍历数组来实现。第一次遍历使用动态规划的思想,计算从数组开头到每个索引处的元素之和并保存在数组 nums 中。第二次遍历依次检查每个索引处,将数组分为左半部分和右半部分,并比较两部分的和是否相等。如果相等则返回当前索引值,否则返回默认值 -1。
代码的文字解释如下:
- 传入一个整型数组
nums作为参数。 - 第一次遍历数组,从索引
1开始,将每个索引处的元素值加上前一个索引处的元素值,即nums[i] += nums[i - 1]。 - 初始化一个变量
x并赋值为-1,用于存储最终的索引值。 - 第二次遍历数组,依次检查每个索引处。对于当前索引 j,将数组根据当前索引分为左半部分和右半部分。左半部分的和为 m,如果 j > 0 则取 nums[j - 1],否则取 0。右半部分的和为 n,如果 j < nums.length - 1 则取 nums[nums.length - 1] - nums[j],否则取 0。如果左半部分的和等于右半部分的和,将索引 j 赋值给变量 x。
- 返回变量
x作为结果。如果找不到符合条件的索引,则默认返回-1。
顺丰集团工作强度 304人发布
