Leetcode No.303区域和检索-数组不可变

题目大意

给定一个整数数组 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
说明
1.你可以假设数组不可变。
2.会多次调用 sumRange 方法。

方法一:暴力法

直接遍历i到j的数组,计算sum。

private int[] data;
    public NumArray(int[] nums) {
         data = nums;
    }
public int sumRange(int i, int j) {
        int sum = 0;
        for (;i<=j;i++)
            sum+=data[i];
        return sum;
    }

运行时间551ms,击败7.06%。

方法二:动态规划

sum[k]表示下标0...k-1的序列和。

private int[] data;
private int[] sum;
public NumArray(int[] nums) {
        data = nums;
        sum = new int[nums.length+1];
        for(int i=0;i<nums.length;i++)
            sum[i+1]=sum[i]+nums[i];
    }
public int sumRange(int i,int j) {
        return sum[j+1]-sum[i];
    }

注意:这里有个技巧是设置一个虚拟0,避免一些越界操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在项目中一般都是使用ViewPage实现水平引导页,竖向的引导页需要自己定义 一、自定义VerticalLinea...
    Ayres阅读 778评论 0 1
  • 刮一阵风 落一地叶 下一场雨 积一潭水 遇一次你 乱一阵心 故事的结局 是枯萎干涸 是别离
    有点懒的小年轻阅读 245评论 0 11
  • 我觉得 人生真的是太艰难了 有时候 选择真是太重要了 一念之差 要付出多少汗水 ps:租个房子怎么这么难哪
    夏浅xq阅读 117评论 1 0
  • 内容摘抄-- 1. 比起“称赞”的俯瞰视线,“感谢”的平行视线更能增强信赖自己与信赖别人的效果。增加贡献与感谢的体...
    小鹿快跑吧阅读 339评论 2 1