美文网首页
平均值问题

平均值问题

作者: madao756 | 来源:发表于2020-03-12 11:40 被阅读0次

    0X00 总结

    简单的滑动窗口, 动态计算平均值

    class Solution:
        def findMaxAverage(self, nums: List[int], k: int) -> float:
            ans = float("-inf")
            s = 0
            for i in range(k):
                s += nums[i]
            ans = s / k
            j = 0
            for i in range(k, len(nums)):
                s += nums[i]
                s -= nums[j]
                j += 1
                ans = max(ans, s / k)
            return ans
    

    二分法去做这个题目, 很重要! 10^{-5} 是二分法的提示

    class Solution:
        def findMaxAverage(self, nums: List[int], k: int) -> float:
            # 二分搜索太牛逼
            def check(mid):
                # 前缀和计算
                sums = [0] * (len(nums) + 1)
                for i in range(1, len(sums)):
                    sums[i] = sums[i-1] + nums[i-1] - mid
                
                # 判断是否存在
                t = 0
                for i in range(k, len(nums) + 1):
                    if sums[i] - t >= 0: return True
                    t = min(t, sums[i-k+1])
                return False
            
            left, right = min(nums), max(nums)
            mid = left
            while right - left > 0.00001:
                mid = left + (right - left) / 2
                # 存在 一个 子串的平均值大于 mid
                if check(mid):
                    left = mid
                else:
                    right = mid
            
            return mid
    

    相关文章

      网友评论

          本文标题:平均值问题

          本文链接:https://www.haomeiwen.com/subject/fcayjhtx.html