問題: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.git
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.
複製代碼
方法: 由於數組是不可變的,因此能夠先建立和集,和集每一位存儲數組前n項和,這樣i到j的和就是前j項和減去前i項和,不須要每次都去循環獲取i到j項的和,提升算法的效率,算法複雜度是O(1)。github
具體實現:算法
class RangeSumQueryImmutable(nums: IntArray) {
val sums = IntArray(nums.size + 1)
init {
for (index in nums.indices) {
sums[index + 1] = sums[index] + nums[index]
}
}
/**
* Your NumArray object will be instantiated and called as such:
* var obj = NumArray(nums)
* var param_1 = obj.sumRange(i,j)
*/
fun sumRange(i: Int, j: Int): Int {
return sums[j + 1] - sums[i]
}
}
fun main(args: Array<String>) {
val rangeSumQueryImmutable = RangeSumQueryImmutable(intArrayOf(-2, 0, 3, -5, 2, -1))
val sum = rangeSumQueryImmutable.sumRange(0, 2)
println(sum)
}
複製代碼
有問題隨時溝通數組
具體代碼實現能夠參考Githubbash