算法打卡day11

今日任务:

1)239. 滑动窗口最大值

2)347.前 K 个高频元素

239. 滑动窗口最大值

题目链接:239. 滑动窗口最大值 - 力扣(LeetCode)

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。

示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置             最大值
----------------------------     -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7
--------------------------------------------

示例 2:
输入:nums = [1], k = 1
输出:[1]

文章讲解:代码随想录 (programmercarl.com)

视频讲解:单调队列正式登场!| LeetCode:239. 滑动窗口最大值哔哩哔哩bilibili

方法一:暴力解法思路

直接采用双指针循环遍历数组,每次取出滑动窗口中最大值,提交超时,时间复杂度为O(kn)

class Solution:
    # 暴力解法,超时,时间复杂度O(kn)
    def maxSlidingWindow(self, nums: list[int], k: int) -> list[int]:
        left = 0
        right = k
        res = []
        while right <= len(nums):
            maxSum = max(nums[left:right])
            res.append(maxSum)
            left += 1
            right += 1

        return res

方法二:采用单调队列

1)首先,我们需要自己实现单调队列,队列中只维护最大值即可。队列是先进先出,那我们队列长度控制为k。

2)当进来一个数时,比较其与队列中最后一个数的大小

     若新增数大,则弹出队列中的的数。

        若队列中的数大,则添加新增数

        

3)当队列中满k个元素时,我们需要将最前面的元素弹出,同时新增一个数,重复2)过程

class Solution:
    def maxSlidingWindow2(self, nums: list[int], k: int) -> list[int]:
        q = MyQueue()
        res = []
        # 将前k个元素放进队列
        for i in nums[:k]:
            q.push(i)

        # 收集最大值
        res.append(q.getMax())

        for i in range(k,len(nums)):
            # 移除窗口最前面的元素
            q.pop(nums[i-k])

            # 新增元素
            q.push(nums[i])

            # 获得当前最大元素,将最大值添加到列表中
            res.append(q.getMax())

        return res



# 定义一个单调队列
class MyQueue():
    def __init__(self):
        # 使用deque实现单调队列
        self.queue = deque()

    def pop(self,value):
        if self.queue and value == self.queue[0]:
            self.queue.popleft()

    def push(self,value):
        while self.queue and value > self.queue[-1]:
            self.queue.pop()
        self.queue.append(value)

    def getMax(self):
        return self.queue[0]

感想:

这题核心是要用单调队列结构。如果不熟悉这个结构就比较难。所以还是的反复做题,多熟悉数据结构

347.前 K 个高频元素

题目链接:347. 前 K 个高频元素 - 力扣(LeetCode)

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:
输入: nums = [1], k = 1
输出: [1]

文章讲解:代码随想录 (programmercarl.com)

视频讲解:优先级队列正式登场!大顶堆、小顶堆该怎么用?| LeetCode:347.前 K 个高频元素哔哩哔哩bilibili

思路:

1)首先先用map求频率

2)然后采用优先队列去对频率排序,维护前k个元素,有一点要注意,应该采用小顶堆实现,每次弹出堆顶的最小数,把大数留下来

import heapq

class Solution:
    def topKFrequent(self, nums: list[int], k: int) -> list[int]:
        # 统计频率
        f = {}
        for i in nums:
            f[i] = f.get(i,0) + 1

        # 定义一个小顶堆,大小为k
        priority_queue = []
        for key,freq in f.items():
            heapq.heappush(priority_queue, (freq, key))
            if len(priority_queue) > k:  # 如果堆的大小大于了K,则队列弹出,保证堆的大小一直为k
                heapq.heappop(priority_queue)

        # 找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组
        result = [0] * k
        for i in range(k - 1, -1, -1):
            # 将弹出小顶堆中第二个值key存放在列表中
            result[i] = heapq.heappop(priority_queue)[1]
        return result

感想:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/476340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Python如何实现数据驱动的接口自动化测试

前言 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff0c;token,mobile,email三个参数 token为必填项…

【项目】基于YOLOv8和RotNet实现圆形滑块验证码(拼图)自动识别(通过识别中间圆形的角度实现)

TOC 一、引言 1.1 实现目标 要达到的效果是使用算法预测中间圆形的角度&#xff0c;返回给服务器&#xff0c;实现自动完成验证码的问题。要实现的内容如下图所示。 1.2 实现思路 思路1&#xff08;效果较差&#xff09;&#xff1a;以RotNet要实现的验证码识别为灵感&…

微信小程序(五十九)使用鉴权组件时原页面js自动加载解决方法(24/3/14)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用覆盖函数的方法阻止原页面的自动执行方法 2.使用判断实现只有当未登录时才进行方法覆盖 源码&#xff1a; app.json {"pages": ["pages/index/index","pages/logs/logs"],…

python中如何生成词云

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 今天给大家看看&#xff0c;如何使用python实现根据记录创建生成词云 首先我们看下效果图。 一个是生成了新闻的词云&#xff0c;另一个是生成了聊天记录的词云。下面是代码&#xff1a; …

Java学习笔记(19)

双列集合 键值对 一一对应 键值对对象 entry Map Put第一次给不存在的key&#xff0c;会把键值对添加到map中&#xff0c;返回null Put给同一个key是会覆盖value的&#xff0c;返回被覆盖的值value Remove根据key删除键值对&#xff0c;返回被删除的值value Map遍历 键找值 …

python语法踩坑 | list的append操作如何从in-place改为out-of-place

背景 博主写python遇到一个问题&#xff0c;需要把对list添加元素改为非原地操作&#xff0c;即不修改原list。 但是由于列表中的元素是字典类型&#xff0c;无法直接用运算符。 于是写出了下面这行代码 query_list message_list.copy().append(one_question) 其中message…

Anaconda安装 (windowsLinux)

文章目录 Anaconda简介设置国内源pip || conda 一、Anaconda &#xff08;Windows系统&#xff09;1.1 下载及安装1.2 虚拟环境创建1.3 在Pycharm中配置conda的环境 二、Anaconda&#xff08;Linux系统&#xff09; Anaconda简介 conda是一个开源的包、环境管理器&#xff0c;可…

探索 Atlassian 云平台:组织、站点、产品架构解析

我们通常访问的是 Atlassian 的某个云站点&#xff0c;比如填空题-中国站点为&#xff1a;cloze-cn.atlassian.net。当我们访问该站点内的具体产品时&#xff0c;只需在该站点的 URL 后添加相应产品的缩写&#xff0c;例如&#xff1a; Confluence: cloze-cn.atlassian.net/wi…

12.电子产品拆解分析-LED T8_16W灯管

12.电子产品拆解分析~LED_T8_16W家用灯管 一、功能介绍二、电路分析以及器件作用一、功能介绍 ①无需使用镇流器(启辉器),只需接到220V即可点亮使用;②节能省电 透光性强 无可视频闪;二、电路分析以及器件作用 220V交流电经过MB10F桥式整流出300V脉动直流电,然后经过6.8u…

某J 集成 cas5.3res api登录

在学习一个开源项目是时集成了cas&#xff0c;但文档过于简单&#xff0c;研究了两天这次记录做个补充 1.下载cas项目 GitHub - apereo/cas-overlay-template at 5.3 2.编译 解压zip&#xff0c;命令行进去&#xff0c;执行mvn clean package 结束之后会出现 target 文件夹&…

Android14 - Framework- Configuration的创建和更新

本文描述从启动一个新进程的Activity起&#xff0c;Framwork层Configuration的创建和传导过程。 首先&#xff0c;我们知道所有的Window容器都继承于WindowContainer&#xff0c;而WindowContainer本身是ConfigurationContainer的子类。于此同时&#xff0c;WindowProcessContr…

[NOIP1998 提高组] 拼数

[NOIP1998 提高组] 拼数 题目描述 设有 n n n 个正整数 a 1 … a n a_1 \dots a_n a1​…an​&#xff0c;将它们联接成一排&#xff0c;相邻数字首尾相接&#xff0c;组成一个最大的整数。 输入格式 第一行有一个整数&#xff0c;表示数字个数 n n n。 第二行有 n n …

【Vue3遇见的问题】创建vue3的项目使用vscode打开后项目的app.vue里面存在爆红

出现的问题 直接上上问题:问题的图片如下: 解决方法 解决效果 补充 因为vetur的插件禁用了 所以需要一个新插件来 这里发现的官网推荐的插件 也就是volar 他两是一样的

各位老板,你需要的工厂数字孪生可视化库在这

各位老板是不是很喜欢下面这种有逼格的大屏,下面介绍一下怎么实现的,保证有所收获。 Cesium是一个开源的WebGL JavaScript库&#xff0c;用于创建高性能的三维地球、地图和虚拟环境。它支持在浏览器中实现高质量的地球模拟&#xff0c;同时提供了丰富的功能特点&#xff0c;使得…

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态&#xff1f; 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级&#xff1f; 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

AI基础知识(4)--贝叶斯分类器

1.什么是贝叶斯判定准则&#xff08;Bayes decision rule&#xff09;&#xff1f;什么是贝叶斯最优分类器&#xff08;Bayes optimal classifier&#xff09;&#xff1f; 贝叶斯判定准则&#xff1a;为最小化总体风险&#xff0c;只需在每个样本上选择那个能使条件风险最小的…

用 Open-Sora 高效创作视频,让创意触手可及

近年来&#xff0c;视频内容以爆炸式增长席卷了我们的生活。从短视频平台到直播带货&#xff0c;视频正成为人们获取信息和娱乐的主要方式。然而&#xff0c;传统视频制作流程往往耗时费力&#xff0c;对于普通用户来说门槛较高。 为了降低视频创作门槛&#xff0c;让更多人享…

Git的 .gitignore文件及标签使用

Git的 .gitignore文件及标签使用 什么是.gitignoregit check-ignore -v 文件名 查看.gitignore里面什么内容忽略了该文件 git add -f [filename] 强制添加把指定文件排除在 .gitignore 规则外的写法给命令配置别名标签创建标签git tag [name] 创建标签git tag 列出所有标签git …

RESNET的复现pytorch版本

RESNET的复现pytorch版本 使用的数据为Object_102_CaDataset&#xff0c;可以在网上下载&#xff0c;也可以在评论区问。 RESNET模型的亮点 1.提出了残差模块。 2.使用Batch Normalization加速训练 3.残差网络&#xff1a;易于收敛&#xff0c;很好的解决了退化问题&#…

真实数据!一张切片实现101种蛋白的超多重空间单细胞原位成像

头颈鳞状细胞癌 (HNSCC) 是第七大常见癌症。免疫检查点抑制剂 (ICIs) 在治疗复发/转移病例方面显示出良好前景&#xff0c;约30%的患者可获得持久获益。但是目前反映HNSCC肿瘤微环境 (TME) 特征的生物标志物有限&#xff0c;需要更深入的组织表征分析。因此&#xff0c;需要新的…