学习内容

LeeCodeJava

724.寻找数组的中间索引

我的代码

  1. class Solution {
  2. public int pivotIndex(int[] nums) {
  3. double sum=0;
  4. double leftSum=0;
  5. for (int num : nums) {
  6. sum += num;
  7. }
  8. for (int i = 0; i < nums.length; i++) {
  9. if(leftSum==((sum-nums[i])/2.0)){
  10. return i;
  11. }else{
  12. leftSum+=nums[i];
  13. }
  14. }
  15. return -1;
  16. }
  17. }

思路

先计算整个数组的和,然后逐个将左指针向右移,当还没加上这个数时,左侧总值刚好等于总数减去这个值除二,即左侧的值刚好等于右侧的值时,返回结果.如果遍历完都没有找到,那么返回-1.

改进思路

1.单侧推进变成,两侧推进
2.尽量不适用Double

改进代码

  1. class Solution {
  2. public int pivotIndex(int[] nums) {
  3. int sum=0;
  4. int leftSum=0;
  5. for (int num : nums) {
  6. sum += num;
  7. }
  8. for (int i = 0; i < nums.length; i++) {
  9. if(leftSum*2+nums[i]==sum){
  10. return i;
  11. }else{
  12. leftSum+=nums[i];
  13. }
  14. }
  15. return -1;
  16. }
  17. }

心得:

1.最终两侧推进的方法破产,还是使用单侧推进的方式.
2.将直观的将左侧等于总值减去目标index除以2的值的判断方式破产,选择了将左值*2+nums[index]=sum的方法,减少了double类型使用,好像也减少了取值的次数,进而减少了运行时间以及内存占用.