栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode1991. 找到数组的中间位置

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode1991. 找到数组的中间位置

LeetCode1991. 找到数组的中间位置
  • 一、题目
    • 1、题目描述
    • 2、基础框架
    • 3、原题链接
  • 二、解题报告
    • 1、思路分析
    • 2、复杂度分析
    • 3、代码详解

一、题目 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 。

2、基础框架
int findMiddleIndex(int* nums, int numsSize){
}
3、原题链接

1991. 找到数组的中间位置

二、解题报告 1、思路分析
  1. 方法:前缀和
  2. 思路:
  • 记数组的全部元素之和为 total ,当遍历到第 i 个元素时,设其左侧元素之和为 sum ,则其右侧元素之和为 total - nums[i] - sum。左右侧元素相等即为 sum = total - num[i] - sum,即 2 x sum + nums[i] = total。
  • 当中心索引左侧或右侧没有元素时,即为零个项相加,这在数学上称作 [ 空和 ](empty sum)。在程序设计中我们约定 「空和是零」。
2、复杂度分析
  • 时间复杂度:O(n),其中 n 为数组的长度
  • 空间复杂度:O(1)
3、代码详解
int findMiddleIndex(int* nums, int numsSize){
    int total = 0;
    for(int i = 0; i < numsSize; i++)
        total += nums[i];
    int sum = 0;
    for(int j = 0; j < numsSize; j++)
    {
        if(nums[j] + sum * 2 == total)
            return j;
        sum += nums[j];
    }
    return -1;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883781.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号