leetcode和算法----日更

leetcode 643 子数组最大平均数I

2020-02-15  本文已影响0人  Arsenal4ever

维护一个长度为 k 的数组,扫描一遍,贪心取平均值,然后超时了......

class Solution(object):
    def findMaxAverage(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: float
        """
        if len(nums) == k:
            return sum(nums) / float(k)

        answer = float('-inf')
        array = []
        for num in nums:
            if len(array) < k:
                array.append(num)
            else:
                answer = max(sum(array)/float(len(array)), answer)
                array.pop(0)
                array.append(num)
        answer = max(sum(array)/float(len(array)), answer)
        return answer

又超时!!!

class Solution(object):
    def findMaxAverage(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: float
        """
        if len(nums) == k:
            return sum(nums) / float(k)

        s = 0
        for i in range(0, len(nums) - k + 1):
            s = max(sum(nums[i: i+k]), s)
        return s / float(k)

k 大了就会超时......

去掉 sum 之后,终于 ok 了!!!

class Solution(object):
    def findMaxAverage(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: float
        """
        if len(nums) == k:
            return sum(nums) / float(k)

        s = float('-inf')
        t = sum(nums[:k])
        for i in range(0, len(nums) - k):
            s = max(s, t)
            t += nums[i+k] - nums[i]
        s = max(s, t)
        return s / float(k)

思路嘛,就是长度固定时,遍历一遍是先从 第 k + 1 个数( 下标为k ) 开始算。

上一篇 下一篇

猜你喜欢

热点阅读