LeetCode筆記:303. Range Sum Query - Immutable

問題:

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Example:

Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
Note:

  1. You may assume that the array does not change.
  2. There are many calls to sumRange function.

大意:

給出一個(gè)整型數(shù)組 nums,尋找其中位置 i 與 j 之間元素的和,包括 i 與 j 元素。
例子:

給出 nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
注意:

  1. 你可以假設(shè)數(shù)組不會(huì)變。
  2. 會(huì)多次調(diào)用 sumRange 函數(shù)。

思路:

這道題其實(shí)不是考某種算法,而是考實(shí)現(xiàn)的方式。題目給出了一個(gè)初始化函數(shù)一個(gè)計(jì)算和的函數(shù),如下:

public class NumArray {
    
    public NumArray(int[] nums) {
        
    }

    public int sumRange(int i, int j) {
        
    }
}

一般的實(shí)現(xiàn)方法很直接,定義一個(gè)變量 nums 數(shù)組,在初始化函數(shù)中賦值,在求和函數(shù)中直接遍歷計(jì)算就行了很簡(jiǎn)單。但是如果直接這樣做,答案會(huì)超時(shí)。題目明確指出求和函數(shù)會(huì)被多次調(diào)用,因此這里應(yīng)該盡量簡(jiǎn)化求和函數(shù),而把復(fù)雜度放在初始化時(shí)。

我們?cè)诔跏蓟瘯r(shí),直接將每個(gè)元素的值改為從第一個(gè)元素到當(dāng)前元素的和,這樣在初始化時(shí)遍歷計(jì)算一次。然后在求和時(shí),只需要很簡(jiǎn)單地用兩個(gè)位置的值相減就可以得出中間元素的和了。

代碼(Java):

public class NumArray {
    int[] nums;
    
    public NumArray(int[] nums) {
        for (int i = 1; i < nums.length; i++)
            nums[i] += nums[i-1];
        
        this.nums = nums;
    }

    public int sumRange(int i, int j) {
        if (i == 0) return nums[j];
        else return nums[j] - nums[i-1];
    }
}

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁(yè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,921評(píng)論 0 33
  • #mark- 01-數(shù)組內(nèi)存存儲(chǔ)細(xì)節(jié) //問題:變量和數(shù)組在內(nèi)存中存儲(chǔ)的區(qū)別? 注意作圖分析內(nèi)存 1.變量在內(nèi)存中...
    飛飛喵閱讀 874評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,692評(píng)論 18 399
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,614評(píng)論 3 44
  • 在“微信閱讀”APP,讀完了王小波寫給李銀河的情書集《愛你就像愛生命》。 王小波曾說(shuō)過,“一個(gè)人只擁有此生此世是不...
    泛舟紅塵閱讀 1,683評(píng)論 0 1

友情鏈接更多精彩內(nèi)容