Leetcode 303 Range Sum Query - Immutable Python題解


題目大意

輸入一個數組,給定兩個數組的索引i和j(i <= j),計算從索引i到j的和。
原題鏈接:303. Range Sum Query - Immutable

題解

一開始的時候我打算在初始化的時候用一個二維數組存儲所有結果值,然后每次獲取和的時候直接訪問緩存的二維數組即可。
理想很美好,現實很撲街,慘遭MLE。

class NumArray(object):

    def __init__(self, nums):
        array_length = len(nums)
        self._look_up = [[None] * array_length for i in range(array_length)]

        # initialize first element
        for i in range(array_length):
            self._look_up[i][i] = nums[i]

        for row in range(array_length):
            for col in range(row + 1, array_length):
                self._look_up[row][col] = self._look_up[row][col - 1] + nums[col]

    def sumRange(self, i, j):
        return self._look_up[i][j]

在上面的代碼中初始化的時候有一半的元素是沒有用的,都為None,於是我調整了索引之間的計算關系,然而並沒有什么卵用,慘遭TLE。

class NumArray(object):

    def __init__(self, nums):
        """ :param nums: 本來self._look_up是這樣子的 self._look_up = [[None] * array_length for i in range(array_length)] 但是有一半是None,浪費的內存太多了,結果導致MLE 根據計算關系優化吧 """
        array_length = len(nums)
        self._look_up = [[None] * (array_length - i) for i in range(array_length)]

        # initialize first element
        for i in range(array_length):
            self._look_up[i][0] = nums[i]

        for row in range(array_length):
            for col in range(1, array_length - row):
                self._look_up[row][col] = self._look_up[row][col - 1] + nums[row + col]

    def sumRange(self, i, j):
        return self._look_up[i][j - i]

最后使用一維數組存儲計算結果,每次取結果的時候通過減法完成計算。

class NumArray(object):

    def __init__(self, nums):
        """ :param nums: 不一定是求一個二維數組,一位數組也可以,計算的時候用減法就可以了 """
        array_length = len(nums)
        self._look_up = [None] * array_length
        if array_length != 0:
            self._look_up[0] = nums[0]

            for i in range(1, array_length):
                self._look_up[i] = self._look_up[i - 1] + nums[i]

    def sumRange(self, i, j):
        if i == 0:
            return self._look_up[j]
        else:
            return self._look_up[j] - self._look_up[i - 1]

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com