美文网首页
LeetCode ---- 区域和检索

LeetCode ---- 区域和检索

作者: wolfaherd | 来源:发表于2019-11-29 19:34 被阅读0次

方法一:暴力法

 每次调用 sumRange 时,我们都使用for循环将索引 i 到 j 之间的每个元素相加。

class NumArray {
public:
    vector<int> vecNums;
    NumArray(vector<int>& nums):vecNums(nums) {
        
    }
    
    int sumRange(int i, int j) {
        int result = 0;
        for(int index = i;index <= j;index++ ){
            result += vecNums[index];
        }
        return result;
    }
};

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray* obj = new NumArray(nums);
 * int param_1 = obj->sumRange(i,j);
 */

复杂度分析
 时间复杂度:每次查询的时间 O(n),每个 sumrange 查询需要 O(n) 时间。
 空间复杂度:O(1)。

方法二:缓存

class NumArray {
public:
    vector<int> numsVec;
    NumArray(vector<int>& nums){
        numsVec.push_back(0);
        for(int i = 0;i != nums.size();i++){
            numsVec.push_back(numsVec[i] + nums[i]); 
        }
    }
    int sumRange(int i, int j) {
        return numsVec[j + 1] - numsVec[i];
    }
};

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray* obj = new NumArray(nums);
 * int param_1 = obj->sumRange(i,j);
 */

复杂度分析
 每次查询的时间 O(1),O(N) 预计算时间。由于累积和被缓存,每个sumRange查询都可以用 O(1)时间计算。。
 空间复杂度:O(1)。

相关文章

网友评论

      本文标题:LeetCode ---- 区域和检索

      本文链接:https://www.haomeiwen.com/subject/gqfgwctx.html