寻找数组的中心下标 ---- 前缀和

题目接

题目:

分析:

  • 这道题是求某个区间内数组的和, 所以可以用前缀和算法
  • 假设i位置是中心位置, 我们要知道[0,i - 1]的和 和 [i + 1,n - 1]的和 看是否相等
  • 先求[0,i - 1]的和 用一个前缀数组f
    此时f[i] 表示: 前i - 1个数的和, 那么f[i - 1] 就表示前i - 2的和, 所以让f[0] = 0, i从1开始, 从前往后遍历
    f[i] = f[i - 1] + nums[i - 1]
  • 求[i + 1,n - 1]的和 用一个后缀数组g
    此时g[i] 表示: 后i + 1个数的和, 那么g[i + 1] 就表示后i + 2的和, 所以让g[n - 1] = 0, i从n-2开始, 从后往前遍历
    g[i] = g[i + 1] + nums[i + 1]
  • 从头遍历数组, 判断f[i] 是否等于 g[i]

代码:

java 复制代码
class Solution {
    public int pivotIndex(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];
        for (int j = 1; j < n; j++) {
            f[j] = f[j - 1] + nums[j -1];
        }
        for (int j = n - 2; j >= 0; j--) {
            g[j] = g[j + 1] + nums[j + 1];
        }
        for (int i = 0; i < n; i++) {
            if(f[i] == g[i]){
                return i;
            }
        }
        return -1;
    }
}
相关推荐
清酒难咽4 小时前
算法案例之递归
c++·经验分享·算法
让我上个超影吧4 小时前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
张张努力变强5 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-5 小时前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
钱彬 (Qian Bin)5 小时前
项目实践19—全球证件智能识别系统(优化检索算法:从MobileNet转EfficientNet)
算法·全球证件识别
feifeigo1235 小时前
基于EM算法的混合Copula MATLAB实现
开发语言·算法·matlab
漫随流水6 小时前
leetcode回溯算法(78.子集)
数据结构·算法·leetcode·回溯算法
全栈游侠6 小时前
数据结构 - 链表
数据结构·链表
一生只为赢6 小时前
通俗易懂:ARM指令的寻址方式(三)
运维·arm开发·数据结构·嵌入式实时数据库
IT猿手6 小时前
六种智能优化算法(NOA、MA、PSO、GA、ZOA、SWO)求解23个基准测试函数(含参考文献及MATLAB代码)
开发语言·算法·matlab·无人机·无人机路径规划·最新多目标优化算法