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. 区域和检索 - 数组可修改

  • 相关阅读:
    前端之CSS1
    前端之HTML
    Python进阶之网络编程
    SparkSQL——HiveContext的使用
    SparkSQL——SQLContext的使用
    语义分析
    SLR(1)分析法分析过程
    算符优先分析法
    LL(1)语法分析
    递归下降分析分析法
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/12839039.html
Copyright © 2011-2022 走看看