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

文章目录

  • 1. 题目
  • 2. 题目解析
  • 3. 代码

1. 题目

在线oj
【前缀和】-- 寻找数组的中心下标_第1张图片

2. 题目解析

前缀和
【前缀和】-- 寻找数组的中心下标_第2张图片

  • 前缀和数组f:f[i]表示[0, i-1]区间,所有元素的和。
    f[i] = f[i-1] + nums[i-1]
  • 后缀和数组g:g[i]表示[i+1, n-1]区间,所有元素的和。
    g[i] = g[i+1] + nums[i+1]

【细节问题】:

  1. 初始化
    需要单独初始化f[0]和g[n-1]
    f[0] = 0;
    g[n-1] = 0;

  2. 填表顺序
    f:从左向右
    g:从右向左

3. 代码

class Solution {
    public int pivotIndex(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[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;
    }
}

你可能感兴趣的:(算法,java,算法,开发语言,leetcode)