LeetCode算法題-Range Sum Query Immutable(Java實現)

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第70題(順位題號是303)。給定整數數組nums,找到索引i和j(i≤j)之間的元素之和,包括端點。例如:算法

給定nums = [-2,0,3,-5,2,-1]數組

sumRange(0,2) - > 1數據結構

sumRange(2,5) - > -1eclipse

sumRange(0,5) - > -3函數

注意:工具

  • 您能夠假設數組不會更改。開發工具

  • sumRange函數有不少調用。測試

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
 spa

02 第一種解法

使用暴力解法,直接使用for循環依次將i到j之間的元素求和,最後再返回其和。code

此解法空間複雜度是O(1),時間複雜度是O(n)

class NumArray {

    public int[] arr;

    public NumArray(int[] nums) {
        arr = nums;
    }

    public int sumRange(int i, int j) {
        int sum = 0;
        for (int k=i; k<= j; k++) {
            sum += arr[k];
        }
        return sum;
    }
}

 

03 第二種解法

若是使用第一種解法,sumRange的方法調用次數太多,而且每次都要從新開始計算,咱們能夠事先把不一樣位置元素的和算出來存到另一個數組中,在sumRange中直接去新數組中取對應位置的和作減法便可。

此解法時間複雜度是O(1),空間複雜度是O(n)

class NumArray2 {

    public int[] sum;

    public NumArray2(int[] nums) {
        sum = new int[nums.length+1];
        for (int i=0; i<nums.length; i++) {
            sum[i+1] = nums[i] + sum[i];
        }
    }

    public int sumRange(int i, int j) {
       return sum[j+1] - sum[i];
    }
}

 

04 小結

算法專題目前已連續日更超過兩個月,算法題文章70+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索