【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;
    }
};
相关推荐
_OP_CHEN7 分钟前
【算法基础篇】(四十八)突破 IO 与数值极限:快速读写 +__int128 实战指南
c++·算法·蓝桥杯·算法竞赛·快速读写·高精度算法·acm/icpc
程序员泠零澪回家种桔子11 分钟前
RAG自查询:让AI精准检索的秘密武器
人工智能·后端·算法
企鹅侠客13 分钟前
第24章—数据结构篇:skiplist原理与实现解析
数据结构·skiplist
玖釉-13 分钟前
[Vulkan 实战] 深入解析 Vulkan Compute Shader:实现高效 N-Body 粒子模拟
c++·windows·图形渲染
云泽80814 分钟前
深入浅出 C++ 继承:从基础概念到模板、转换与作用域的实战指南
开发语言·c++
a***592614 分钟前
C++跨平台开发:挑战与实战指南
c++·c#
十五年专注C++开发17 分钟前
CMake进阶:模块模式示例FindOpenCL.cmake详解
开发语言·c++·cmake·跨平台编译
糖葫芦君19 分钟前
TRPO-trust region policy optimization论文讲解
人工智能·算法·机器学习·强化学习
HaiLang_IT35 分钟前
基于RepVGG与注意力机制的手写潦草汉字识别算法研究
算法
Chan1636 分钟前
【 微服务SpringCloud | 模块拆分 】
java·数据结构·spring boot·微服务·云原生·架构·intellij-idea