LeetCode:Range Sum Query - Immutable - 數組指定區間內的元素和

一、題目名稱java

Range Sum Query(數組指定區間內的元素和)數組

二、題目地址函數

https://leetcode.com/problems/range-sum-query-immutable/this

三、題目內容code

英文:Given an integer array nums, find the sum of the elements between indices i and j (ij), inclusive.索引

中文:給定一個數組nums,求出索引i和j之間元素的和,i必定是小於或等於j的element

例如:leetcode

Given nums = [-2, 0, 3, -5, 2, -1]

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

注意:你能夠假定數組不會發生變化,sumRange函數會被調用屢次開發

四、解題方法get

不一樣於其餘題目以Solution爲類名,本題中給出的類名爲NumArray,而且裏面有兩個函數。第一個函數爲構造函數,第二個函數爲sumRange,這兩個函數都是咱們要實現的函數。

題目給出的代碼結構以下:

public class NumArray {

    public NumArray(int[] nums) {
        
    }

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


// Your NumArray object will be instantiated and called as such:
// NumArray numArray = new NumArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);

在本題中,sumRange可能會被調用屢次,所以採用下面這種方式是不明智的(會致使TLE):

public class NumArray {

    public int[] nums;

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

    public int sumRange(int i, int j) {
        int result = 0;
        for (int counter = i; counter <= j; counter++) {
            result += nums[counter];
        }
        return result;
    }
}

若是咱們換一種思路,在構造函數內就計算了從第一個元素到當前元素全部元素的和,保存到數組sums的對應位置中,在函數sumRange中就能夠很方便地算出題目中要求的結果了。

Java代碼以下:

/**
 * @功能說明:LeetCode 303 - Range Sum Query - Immutable
 * @開發人員:Tsybius2014
 * @開發時間:2015年11月10日
 */
public class NumArray {

    public int[] sums;

    public NumArray(int[] nums) {
        if (nums == null) {
            sums = null;
        } else if (nums.length == 0) {
            sums = new int[0];
        } else {
            this.sums = new int[nums.length];
            sums[0] = nums[0];
            for (int i = 1; i < nums.length; i++) {
                sums[i] = sums[i - 1] + nums[i];
            }
        }
    }

    public int sumRange(int i, int j) {
        if (sums == null) {
            return 0;
        }
        if (i >= sums.length || j >= sums.length || i > j) {
            return 0;
        } else if (i == 0) {
            return sums[j];
        } else {
            return sums[j] - sums[i - 1];
        }
    }
}

END

相關文章
相關標籤/搜索