zoukankan      html  css  js  c++  java
  • LeetCode303. 区域和检索

    题目描述:

    分析:虽然是求区间和,但数组是不可变的,不可变 意思是 不涉及线段树更新操作。因此可以不使用线段树这种复杂的数据结构,对于该题不使用线段树效果更好,初始化是O(n)的复杂度,以后每次调用只需要O(1)的复杂度。

    // 不使用线段树的解决方案
    class NumArray {
    
        private int[] sum; // sum[i]存储前i个元素和, sum[0] = 0                   
        public NumArray(int[] nums) {
            sum = new int[nums.length + 1]; // sum[i]存储nums[0....i-1]的和 
            sum[0] = 0;
            for(int i = 1; i <sum.length; i++){
                sum[i] = sum[i - 1] + nums[i - 1];
            }
        }
        
        public int sumRange(int i, int j) {
            return sum[j + 1] - sum[i]; // 0到j的和 减去 0到i-1的和,剩下的就是i到j的和
        }
    }
    
    /**
     * Your NumArray object will be instantiated and called as such:
     * NumArray obj = new NumArray(nums);
     * int param_1 = obj.sumRange(i,j);
     */
    Solution 1

    对比题目:LeetCode307. 区域和检索 - 数组可修改

  • 相关阅读:
    jQuery标签操作
    Bootstrap和Font Awesome
    jQuery拾遗
    Bootstrap笔记
    软件测试
    Day01 第一个Python程序
    cd指令
    ls命令
    type命令
    每天一个Linux指令
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/12839039.html
Copyright © 2011-2022 走看看