[Leetcode] 303.エリアと検索配列の不変(range-sum-query-immutable)(プレフィックスの合計)[単純]

リンク

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);
 */

おすすめ

転載: blog.csdn.net/Krone_/article/details/114262097