区域和检索——数组不可变

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区域和检索——数组不可变相关的知识,希望对你有一定的参考价值。

区域和检索——数组不可变

给定一个整数数组 nums,处理以下类型的多个查询:

计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right
实现 NumArray 类:

NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + … + nums[right] )

使用前缀和,将sumRange的复杂度降为o(1)

class NumArray 
public:
    NumArray(vector<int>& nums) 
        m_preSum.reserve(nums.size());
        m_preSum[0] = nums[0];
        for(int i = 1; i < nums.size(); ++i)
        
            m_preSum[i] = m_preSum[i-1] + nums[i];   
        
    
    
    int sumRange(int left, int right) 
        if(left == 0)
            return m_preSum[right];
        return m_preSum[right] - m_preSum[left-1];
    
    std::vector<int> m_preSum; //m_preSum[i] 表示前i项的和
;

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

以上是关于区域和检索——数组不可变的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 303 区域和检索 - 数组不可变

leetcode 简单 第七十九题 区域和检索 - 数组不可变

2021/5/30-31 刷题笔记区域和检索与前缀和方法

Leetcode——区域和检索 - 数组不可变 / 二维区域和检索 - 矩阵不可变 (前缀和)

304. 二维区域和检索 - 矩阵不可变

区域和检索——数组不可变