算法:724.寻找数组的中心下标

题目

链接:leetcode链接


思路分析(前缀和)

根据题意,我们可以将数组看成三个部分

left\] \[mid\] \[right

我们只需要left区间内的元素和等于right区间的元素和即可,此时mid就是中心下标

那么我们可以借助前缀和思想,将left区间和right区间的元素和求出来,就可以很好的方便比较

注意,前缀和算法不仅仅是一种算法,更是一种思想。

看到这里,读者们可能会问,通过前缀和算法为什么可以求出right区间的和呢?

当然,用整个数组的和减去left区间和mid元素可以得到答案,

但是,这里介绍一种更好的办法

采用后缀和算法,

什么是后缀和算法呢?

顾名思义,将前缀和反过来,我们从数组末尾向前求和就成了后缀和

具象到代码上就是

f----前缀和

g---后缀和

fi = fi-1 + numsi-1 注意,这里是numsi-1不是numsi,是因为求的是mid前,不包括mid

gi = gi+1 + numsi+1

最后处理好前缀和数组和后缀和数组之后,只需要遍历比较前缀和数组和后缀和数组即可。


代码

C++ 复制代码
int pivotIndex(vector<int>& nums) {
        int n = nums.size();
        vector<int> f(n);
        vector<int> g(n);

        for(int i = 1;i< n;++i)
            f[i] = f[i-1] + nums[i-1];
        for(int i = n-2;i>=0;--i)
            g[i] = g[i+1] + nums[i+1];

        for(int i = 0;i < n;++i)
        {
            if(f[i] == g[i])
            return i;
        }

        return -1;
    }
相关推荐
Q一件事3 分钟前
RWEQ——保留与消去P的soil_loss联合推导
算法
HugoStudio_SWAN1 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
那年窗外下的雪.1 小时前
AIDC 学习日志|第 20 天|多归属业务验收与哈希不均定位
学习·算法·哈希算法
s_w.h2 小时前
【 刷题 】双指针
算法
啥都想学点的研究生2 小时前
一篇文章讲清楚:K-Means聚类算法
算法·kmeans·聚类
白狐_7982 小时前
408 数据结构|KMP做题方法:next、nextval和高频易错点
数据结构·算法
月华路2 小时前
《模型不玄学》第20章 两种评估视角
人工智能·算法·机器学习
禹凕3 小时前
快速幂算法详解与实战
python·算法
xxwl5853 小时前
高斯消元法异或版
人工智能·算法·机器学习
sylviiiiiia3 小时前
leetcode hot 100
python·算法·leetcode