leetcode-2846、560、239、76

题目链接

2846. 边权重均等查询 - 力扣(LeetCode)

解题思路

LCA看不懂

算法详解之最近公共祖先(LCA) - hulean - 博客园 (cnblogs.com)

leetcode-hot100

和为K的子数组

题目链接

560. 和为 K 的子数组 - 力扣(LeetCode)

解题思路

1、暴力破解

class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        n = len(nums)
        result = 0
        for i in range(n):
            for j in range(i, n):
                temp = nums[i:j+1]
                #print(temp)
                sum_ = sum(temp)
                if sum_ == k:
                    result += 1
        return result

超出时间限制

加入改进通过使用一个数组记录前n个数的和,降低时间复杂度。

滑动窗口最大值

题目链接

239. 滑动窗口最大值 - 力扣(LeetCode)

暴力破解

超出时间限制

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        left = 0
        right = k - 1
        n = len(nums)
        result = []
        while right < n:
            minstr = nums[left:right+ 1]
            result.append(max(minstr))
            right += 1
            left += 1
        return result

优先队列:

对于最大值,我们可以想到一种非常合适的数据结构,那就是优先队列,其中的大根堆可以帮助我们实时维护一系列元素的最大值。

对于本题而言,初始时,我们将数组nums的前k个元素放入优先队列中。每当我们向右移动窗口时,我们就把一个新的元素放入优先队列中。此时堆顶的元素就是堆中所有元素的最大值。然而这个最大值可能并不在滑动窗口中,在这种情况下,这个值在数组nums中的位置出现在滑动窗口左边界的左侧1.因此,当我们后续继续向右移动窗口时,这个值就永远不可能出现在滑动窗口中,我们可以将其永久的从优先队列中移除。

我们不断移除堆定的元素,直到其确实出现在滑动窗口中。此时,堆顶元素就是滑动窗口中的最大值。为了方便判断堆顶元素与滑动窗口的位置关系,我们可以在优先队列中存储二元组,表示元素num在数组中的下标位index。

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        n = len(nums)
        #注意python默认的优先队列时小根堆
        q = [(-nums[i], i) for i in range(k)]
        heapq.heapify(q)

        ans = [-q[0][0]]
        for i in range(k,n):
            heapq.heappush(q,(-nums[i],i))
            while q[0][1] <= i - k:
                heapq.heappop(q)
            ans.append(-q[0][0])
        return ans

相关推荐

  1. leetcode

    2024-01-28 21:02:02       57 阅读
  2. leetcode

    2024-01-28 21:02:02       57 阅读
  3. leetcode

    2024-01-28 21:02:02       65 阅读
  4. LeetCode

    2024-01-28 21:02:02       36 阅读
  5. leetcode

    2024-01-28 21:02:02       32 阅读
  6. Leetcode -2

    2024-01-28 21:02:02       52 阅读
  7. Leetcode】计算器

    2024-01-28 21:02:02       65 阅读
  8. LeetCode 45

    2024-01-28 21:02:02       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 21:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 21:02:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 21:02:02       82 阅读
  4. Python语言-面向对象

    2024-01-28 21:02:02       91 阅读

热门阅读

  1. C 练习实例46-宏#define命令练习

    2024-01-28 21:02:02       57 阅读
  2. Python类变量和实例变量

    2024-01-28 21:02:02       49 阅读
  3. CCF-CSP 202309-1 坐标变换(其一)

    2024-01-28 21:02:02       50 阅读
  4. C++继承

    C++继承

    2024-01-28 21:02:02      57 阅读
  5. 用cityscapes fine tune yolov8-seg

    2024-01-28 21:02:02       55 阅读
  6. 《动手学深度学习(PyTorch版)》笔记4.9

    2024-01-28 21:02:02       36 阅读
  7. kingbase常用SQL总结之使用率

    2024-01-28 21:02:02       55 阅读
  8. 代码随想录算法训练营29期Day31|LeetCode 455,376,53

    2024-01-28 21:02:02       62 阅读