zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[LeetCode] 303. 区域和检索 - 数组不可变 ☆(动态规划)

LeetCode规划数组 动态 区域 不可 检索
2023-09-14 09:07:34 时间

描述

给定一个整数数组  nums,求出数组从索引 i 到 j  (i ≤ j) 范围内元素的总和,包含 i,  j 两点。

示例:

给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:

你可以假设数组不可变。
会多次调用 sumRange 方法。

解析

很明显想到动态规划,一维数组即可。存放当前index到index=0的数组和。

代码

    static int[] dp;

    public static void NumArray1(int[] nums) {
        dp = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) {
            dp[i + 1] = dp[i] + nums[i];
        }
        System.out.println(JSON.toJSONString(dp));
    }

    public static int sumRange1(int i, int j) {
        return dp[j + 1] - dp[i];
    }