【LeetCode 75】第十九题(724)寻找数组的中心下标

目录

题目:

示例:

​分析:

代码+运行结果:


题目:

示例:

分析:

给一个数组,让我们找出一个下标,在这个下标左边的元素总和等于这个下标右边的元素总和.

我们可以把整个数组的总和求出来,然后再从左往右遍历一次数组,遍历的同时将遍历过的数累加记录到一个变量中.若遍历到一个数,总和减去它等于遍历过的累加的总和的两倍,那么这个数就是数组的中间,它的下标就是我们要求的下标.

(上图做错了,但是我懒得改了,右下角方框里应该是 (总和-nums[i])/2 == temp) ).

也可以使用前缀和的方法,一样是用一个变量来记录累加的结果,经过三次遍历,第一次遍历记录每个坐标左边累加的结果,第二次遍历记录每个坐标右边累加的结果,第三次遍历寻找到左右累加结果一致的坐标.

代码+运行结果:

cpp 复制代码
class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        //统计总和
        int SUM=0,temp=0;
        for(const int &num:nums) SUM+=num;
        for(int i=0;i<nums.size();i++){
            if((SUM-nums[i])/2.0==static_cast<double>(temp)) return i;
            temp+=nums[i];
        }
        return -1;
    }
};
cpp 复制代码
class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        //前缀和
        vector<pair<int,int>>cache(nums.size(),make_pair(0,0));
        int temp=0;
        for(int i=0;i<nums.size();i++){ //获取前缀和
            cache[i].first=temp;
            temp+=nums[i];
        }
        temp=0;
        for(int i=nums.size()-1;i>=0;i--){  //获取后缀和
            cache[i].second=temp;
            temp+=nums[i];
        }
        for(int i=0;i<cache.size();i++){    //若是前缀后缀一致则返回
            if(cache[i].first==cache[i].second) return i;
        }
        return -1;
    }
};
相关推荐
十年编程老舅3 小时前
吃透 Linux 内核 IO 体系:块缓存与页缓存的核心设计与实现逻辑
linux·数据库·c++·spring·后端技术·页缓存
qq_418101773 小时前
C++中的状态模式
开发语言·c++·算法
weixin_307779133 小时前
构建健壮的XML文档抓取与摘要流水线:Requests + urllib3.Retry + lxml 实践
xml·开发语言·python·算法·性能优化
晨非辰3 小时前
Makefile构建哲学:从依赖推导到自动化编译,掌握大型项目的构建逻辑,告别手动编译焦虑
linux·运维·服务器·c++·人工智能·后端·自动化
如何原谅奋力过但无声3 小时前
【力扣-Python-74】搜索二维矩阵(middle)
数据结构·python·算法·leetcode·矩阵
圣保罗的大教堂3 小时前
leetcode 1878. 矩阵中最大的三个菱形和 中等
leetcode
咱就是说不配啊3 小时前
3.16打卡day30
数据结构·c++·算法
MicroTech20253 小时前
MLGO微算法科技面向复杂非局域模型的量子虚时演化新方案:一种无需局域性假设的量子虚时演化新算法
科技·算法·量子计算
汉克老师3 小时前
GESP2026年3月认证C++二级( 第一部分选择题(1-8))
c++·gesp二级·gesp2级
weixin_649555673 小时前
C语言程序设计第四版(何钦铭、颜晖)第八章指针之判断回文字符串
c语言·开发语言·算法