区域和检索——数组不可变
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 简单 第七十九题 区域和检索 - 数组不可变