问题: 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. 
复制代码

方法: 因为数组是不可变的,所以可以先创建和集,和集每一位存储数组前n项和,这样i到j的和就是前j项和减去前i项和,不需要每次都去循环获取i到j项的和,提高算法的效率,算法复杂度是O(1)。

具体实现:

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) 
} 
复制代码

有问题随时沟通

具体代码实现可以参考Github


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!