学习内容
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类型使用,好像也减少了取值的次数,进而减少了运行时间以及内存占用.
