力扣:1991. 找到数组的中间位置

目录

一.题目

二.解题思路

三.代码

四.题后语


一.题目

        1.题目详情

        给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

        中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。

        如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0 。

        要求:请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1 。

示例 1:

输入:nums = [2,3,-1,8,4]
输出:3
解释:
下标 3 之前的数字和为:2 + 3 + -1 = 4
下标 3 之后的数字和为:4 = 4

1991. 找到数组的中间位置 - 力扣(Leetcode)icon-default.png?t=MBR7https://leetcode.cn/problems/find-the-middle-index-in-array/description/

二.解题思路

        1.直接暴力求解

        2.遍历下标,求出左边和和右边和

        3.比较两边是否相等

        4.相等直接返回值

三.代码

        1.我的

class Solution {
    public int findMiddleIndex(int[] nums) {
        int len=nums.length;
        int MiddleIndex=-1;
        for(int i=0;i<len;i++){
            int lsum=0,rsum=0;
            for(int x=i;x<len;x++)rsum+=nums[x];
            for(int y=i;y>=0;y--)lsum+=nums[y];
            if(lsum==rsum)return MiddleIndex=i;
        }
        return MiddleIndex;
    }
}

        2.题解的

class Solution {
    public int findMiddleIndex(int[] nums) {
        int total = Arrays.stream(nums).sum();
        int sum = 0;
        for (int i = 0; i < nums.length; ++i) {
            if (2 * sum + nums[i] == total) {
                return i;
            }
            sum += nums[i];
        }
        return -1;
    }
}

 

四.题后语

        十分钟不到搞定的题,认为感到做题是对我有提升的,然后习惯性的去思考有没有办法降低空间和时间消耗,然后去看了一下题解,题解的方法是先求出整个数组的和,然后再进入循环查找,因为这道题中,左边加右边加当前的值会等于数组和,换句话说,如果满足题意的下标,那么它左边的和乘2加本身就会等于数组和,因为这时左边等于右边。这个方法相比较于我的方法,我个人认为是时间复杂度更低的才对,但是测试结果出来反而我的用时更短,不是很了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值