LeetCode之Range Sum Query - Immutable(Kotlin)

问题:
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容