当前位置:   article > 正文

java快乐刷力扣 1991题(简单)_java乐扣

java乐扣

1991. 找到数组的中间位置

题目地址:https://leetcode.cn/problems/find-the-middle-index-in-array/

题目描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

实现思路:
  1. 从题目描述以及给出的样例来看,只要数组长度为1,那么就不存在中心下标;
  2. 那么当数组长度大于1时,就要考虑两种极端情况。第一种是nums[1_size-1]求和为0,此时中心下标是0;第二种是nums[0_size-2]求和为0,此时中心下标是size-1
    但是题目要求输出最左边的中心下标,所以我们把第一种情况优先考虑,第二种情况最后考虑,其他的情况放在中间考虑。
  3. 其他的情况指中心下标出现在 1 , 2 , … , size-2 中的情况。此时可以利用等量关系来优化求解速度,即先求出数组总和sum,再考虑以下等量关系:
    【除去中心元素的半部分=sum - nums[i] - nums[0_i]`的累加和 】= 【nums[0_i]的累加和 = 除去中心元素的半部分】
代码:
class Solution {
    public int findMiddleIndex(int[] nums) {
        int size = nums.length;
        
        if(size == 1){
            return 0;
        }
       
        int sum = 0;
        for(int i = 0 ; i < size ; i++){
            sum += nums[i];
        }
        //第一种情况
        if(sum - nums[0] == 0){
            return 0;
        }
        //中间的其他情况
        int left_sum = nums[0];
        for(int j = 1; j < size - 1; j++){
            if(left_sum  == (sum - left_sum - nums[j])){
                return j;
            }
            else{
                left_sum += nums[j];
            }
        }
        //第二种情况
        if(left_sum == 0){
            return size - 1;
        }
        else{
            return -1;
        }

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/87302
推荐阅读
相关标签
  

闽ICP备14008679号