リンク
https://leetcode-cn.com/problems/range-sum-query-immutable/
時間がかかる
問題解決:5分
問題解決:5分
題名
整数配列numsが与えられた場合、2つの点iとjを含む、インデックスiからj(i≤j)の範囲の要素の合計を求めます。
NumArrayクラスを実装します。
- NumArray(int [] nums)は、配列numsを使用してオブジェクトを初期化します
- int sumRange(int i、int j)は、2つの点iとj(つまり、sum(nums [i]、nums [i)を含む、インデックスiからj(i≤j)までの配列nums内の要素の合計を返します。 + 1]、…、Nums [j]))
促す:
- 0 <= nums.length <= 104
- -105 <= nums [i] <= 105
- 0 <= i <= j <nums.length
- sumRangeメソッドを最大104回呼び出す
アイデア
コンストラクターが初期化されると、プレフィックス合計配列が計算されます。面積合計が計算されるたびに、2つの位置のプレフィックス合計を減算して、面積合計を取得できます。詳細については、コードを参照してください。
時間計算量:O(n)O(n)O (n )
ACコード
class NumArray {
public:
vector<int> sum;
NumArray(vector<int>& nums) {
sum.push_back(0);
for(auto num : nums) {
sum.push_back(sum.back()+num);
}
}
int sumRange(int i, int j) {
return sum[j+1]-sum[i];
}
};
/**
* Your NumArray object will be instantiated and called as such:
* NumArray* obj = new NumArray(nums);
* int param_1 = obj->sumRange(i,j);
*/