欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【C++算法】27.前缀和_寻找数组的中心下标

【C++算法】27.前缀和_寻找数组的中心下标

2025/5/11 6:04:05 来源:https://blog.csdn.net/hlyd520/article/details/144203159  浏览:    关键词:【C++算法】27.前缀和_寻找数组的中心下标

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:
    • 图解


题目链接:

724. 寻找数组的中心下标


题目描述:

f80ac283ead34a658b202cef7ff8f30a


解法

暴力枚举:

每次枚举一个下标,就左边加一遍,右边加一遍。

前缀和思想:

f:前缀和数组 这里面f[i]表示:[0,i-1]区间所有元素的和

g:后缀和数组 这里面g[i]表示:[i+1,n-1]区间所有元素的和

f9276e056314b6db8f60a0577dd6aafd

f[i]=f[i-1]+nums[i-1]

g[i]=g[i+1]+nums[i+1]

然后这题要找中心下标,所以,从0~n-1i,使得f[i]==g[i]


C++ 算法代码:

class Solution {public:int pivotIndex(vector<int>& nums) {// lsum[i] 表示:[0, i - 1] 区间所有元素的和// rsum[i] 表示:[i + 1, n - 1] 区间所有元素的和int n = nums.size();vector<int> lsum(n), rsum(n);// 预处理前缀和后缀和数组for(int i = 1; i < n; i++)lsum[i] = lsum[i - 1] + nums[i - 1];for(int i = n - 2; i >= 0; i--)rsum[i] = rsum[i + 1] + nums[i + 1];// 判断for(int i = 0; i < n; i++)if(lsum[i] == rsum[i])return i;return -1;}
};

图解

例如:nums = [1, 7, 3, 6, 5, 6]

251c46a8d2c34ace01540992700fc52e

d1991290f77880a8351a3d0986298a60

lsum[3] == rsum[3],返回3

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词