学习内容
724.寻找数组的中间索引
我的代码
class Solution {
public int pivotIndex(int[] nums) {
double sum=0;
double leftSum=0;
for (int num : nums) {
sum += num;
}
for (int i = 0; i < nums.length; i++) {
if(leftSum==((sum-nums[i])/2.0)){
return i;
}else{
leftSum+=nums[i];
}
}
return -1;
}
}
思路
先计算整个数组的和,然后逐个将左指针向右移,当还没加上这个数时,左侧总值刚好等于总数减去这个值除二,即左侧的值刚好等于右侧的值时,返回结果.如果遍历完都没有找到,那么返回-1.
改进思路
改进代码
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
int leftSum=0;
for (int num : nums) {
sum += num;
}
for (int i = 0; i < nums.length; i++) {
if(leftSum*2+nums[i]==sum){
return i;
}else{
leftSum+=nums[i];
}
}
return -1;
}
}
心得:
1.最终两侧推进的方法破产,还是使用单侧推进的方式.
2.将直观的将左侧等于总值减去目标index除以2的值的判断方式破产,选择了将左值*2+nums[index]=sum的方法,减少了double类型使用,好像也减少了取值的次数,进而减少了运行时间以及内存占用.