当前位置: 首页 > news >正文

力扣hot100-->排序

排序

1. 56. 合并区间

中等

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;
        int n = intervals.size();

        // 按照区间起始点排序
        sort(intervals.begin(), intervals.end());

        for(int i = 0; i < n; ++i) {
            // 如果结果为空或当前区间与最后一个区间不重叠,直接添加
            if (result.empty() || result.back()[1] < intervals[i][0]) {
                result.push_back(intervals[i]);
            } else {
                // 否则合并区间,更新结束点
                result.back()[1] = max(result.back()[1], intervals[i][1]);
            }
        }

        return result;
    }
};
 

2. 215. 数组中的第K个最大元素

中等

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

class Solution {
public:
    // quickselect 函数:使用快速选择算法查找第 k 个元素
    int quickselect(vector<int> &nums, int l, int r, int k) {
        if (l == r)  // 递归终止条件,当左右边界相同,说明找到了目标元素
            return nums[k];  // 返回找到的元素

        int partition = nums[l];  // 选择第一个元素作为枢纽元素
        int i = l - 1, j = r + 1;  // 初始化左右指针
        // 分区操作,将元素分为两部分,左边部分小于枢纽,右边部分大于枢纽
        while (i < j) {
            do i++; while (nums[i] < partition);  // 找到大于或等于枢纽的元素
            do j--; while (nums[j] > partition);  // 找到小于或等于枢纽的元素
            if (i < j)
                swap(nums[i], nums[j]);  // 交换两个元素,使得左边小于枢纽,右边大于枢纽
        }

        // 根据 k 的位置判断在哪个部分继续查找
        if (k <= j)  // 如果 k 在左边部分,继续在左边部分查找
            return quickselect(nums, l, j, k);
        else  // 如果 k 在右边部分,继续在右边部分查找
            return quickselect(nums, j + 1, r, k);
    }

    // findKthLargest 函数:返回数组 nums 中第 k 大的元素
    int findKthLargest(vector<int> &nums, int k) {
        int n = nums.size();  // 数组的大小
        return quickselect(nums, 0, n - 1, n - k);  // 调用 quickselect 查找第 n-k 小的元素
    }
};

解释: 

  • quickselect 函数:

    • 这是快速选择算法的核心部分,目标是查找第 k 小的元素。其工作原理与快速排序相似,但只会递归地处理包含目标元素的部分。
    • 在每次递归时,选择一个枢纽元素,并通过 分区 操作将数组分成两部分:左边部分小于枢纽元素,右边部分大于枢纽元素。
    • 分区操作:通过两个指针 iji 从左边开始,j 从右边开始,分别找到大于等于枢纽的元素和小于等于枢纽的元素,并进行交换。直到两个指针相遇,完成一次分区。
    • 每次递归时,判断目标 k 是否在左部分或右部分,并根据位置选择继续递归哪个部分。
  • findKthLargest 函数:

    • 为了查找第 k 大的元素,findKthLargest 调用 quickselect 来查找第 n-k 小的元素(因为在排序中,第 k 大的元素是第 n-k 小的元素,n 是数组的长度)。
    • quickselect(nums, 0, n - 1, n - k) 表示在整个数组范围内,查找第 n-k 小的元素,最终得到第 k 大的元素。

奇思妙想:

随便写的就对了,sort函数平均时间复杂度为 O(n log n),力扣没判错,额,嘶~~

大家看着玩玩,这绝对不是正确解答。哈哈哈

网友解释说是判题的时候数据量没拉满,拉满的话就超时了,千万不要这样写哟,否则面试出门左拐。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());  // 排序
        int n = nums.size() - k;  // 找到第 k 大的元素的位置
        return nums[n];  // 返回该元素
    }
}; 

3. 347. 前 K 个高频元素

中等

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

示例 1:

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

示例 2:

输入: nums = [1], k = 1
输出: [1]

提示:

  • 1 <= nums.length <= 105
  • k 的取值范围是 [1, 数组中不相同的元素的个数]
  • 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

// 定义自定义比较器,用于构造小顶堆
class mycomparison {
public:
    // 重载 () 运算符
    // 比较两个 pair 的第二个元素(即频率),实现从小到大的排列
    bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) {
        return lhs.second > rhs.second;  // 小顶堆:频率小的优先
    }
};

class Solution {
public:
    // 主函数:获取数组中频率最高的前 K 个元素
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // 使用哈希表统计每个元素的出现次数
        unordered_map<int, int> unMap;
        for (int& num : nums) {
            unMap[num]++;  // 记录每个数字的频率
        }

        // 定义优先队列(小顶堆),使用自定义比较器
        priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pq;

        // 遍历哈希表,将键值对插入到小顶堆中
        for (auto& [key, value] : unMap) {
            pq.push({key, value});  // 插入键值对

            // 如果堆的大小超过 k,则移除堆顶元素
            if (pq.size() > k) {
                pq.pop();  // 弹出频率最低的元素
            }
        }

        // 将堆中的元素提取出来,存入结果数组
        vector<int> result;
        while (!pq.empty()) {
            result.emplace_back(pq.top().first);  // 提取元素的键
            pq.pop();  // 移除堆顶
        }

        return result;  // 返回前 K 个高频元素
    }
};
 

解释:

定义了一个优先队列(即小顶堆)。

  • 堆内存储pair<int, int> 类型的键值对,first 是数字,second 是频率。
  • 比较规则:使用自定义比较器 mycomparison,保证堆顶是当前频率最小的元素。

  • 使用哈希表统计每个数字的频率。
  • 使用小顶堆(优先队列)来维护频率最高的 kkk 个数字。
    • 堆的大小始终保持为 kkk。
    • 当堆的大小超过 kkk 时,移除堆顶元素(频率最小)。
  • 最终,堆中剩下的就是频率最高的 kkk 个数字。

相关文章:

力扣hot100-->排序

排序 1. 56. 合并区间 中等 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输…...

【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)

更新 0.0.1&#xff08;2024/11/26&#xff09;&#xff1a; 1.解决了内建蓝牙无法识别、“steamVR 蓝牙不可用” 的解决方案 2.解决了 tracker 虽然建立了连接但是在 steamVR 界面上看不到的问题 3.解决了 VIVE 基站1.0 无法被蓝牙识别 && 无法被 steamVR 搜索到 &…...

【Nginx】核心概念与安装配置解释

文章目录 1. 概述2. 核心概念2.1.Http服务器2.2.反向代理2.3. 负载均衡 3. 安装与配置3.1.安装3.2.配置文件解释3.2.1.全局配置块3.2.2.HTTP 配置块3.2.3.Server 块3.2.4.Location 块3.2.5.upstream3.2.6. mine.type文件 3.3.多虚拟主机配置 4. 总结 1. 概述 Nginx是我们常用的…...

Qt界面篇:QMessageBox高级用法

1、演示效果 2、用法注意 2.1 设置图标 用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。 QMessageBox::Icon icon(...

【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】

关注二叉树的三个问题&#xff1a; 什么情况适合自顶向下&#xff1f;什么时候适合用自底向上&#xff1f;一般来说&#xff0c;DFS的递归边界是空节点&#xff0c;什么情况下要额外把叶子节点作为递归边界&#xff1f;在什么情况下&#xff0c;DFS需要有返回值&#xff1f;什…...

Mongo数据库 --- Mongo Pipeline

Mongo数据库 --- Mongo Pipeline 什么是Mongo PipelineMongo Pipeline常用的几个StageExplanation with example:MongoDB $matchMongoDB $projectMongoDB $groupMongoDB $unwindMongoDB $countMongoDB $addFields Some Query Examples在C#中使用Aggreagtion Pipeline**方法一: …...

Adobe Illustrator 2024 安装教程与下载分享

介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能&#xff1a; 矢量绘图&#xff1a;Illustrator使用矢量…...

javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET

javax.xml.ws.soap.SOAPFaultException 表示 SOAP 调用过程中发生了错误&#xff0c;并且服务端返回了一个 SOAP Fault。 错误信息中提到的 ZONE_OFFSET 可能指的是时区偏移量。在日期和时间处理中&#xff0c;时区偏移量是指格林威治标准时间 (GMT) 的偏移量。如果服务期望特…...

常用的数据结构

队列(FIFO) 栈(LIFO) 链表 hash表 hash冲突处理 开放式寻址 线性探测 表示依次检查索引为 hash(key) + 1、hash(key) + 2 ... 的位置。i 是冲突后的探查步数。公式:hash(i) = (hash(key) + i) % TableSize二次探查 规则:冲突后探查的步长是平方递增的,例如,检查位置为 hash…...

javaweb-day01-html和css初识

html:超文本标记语言 CSS&#xff1a;层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图&#xff1a; 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 &#xff08;1&#xff09;盒子模型 &#xff08;2&#xff09;页面布局…...

C++11特性(详解)

目录 1.C11简介 2.列表初始化 3.声明 1.auto 2.decltype 3.nullptr 4.范围for循环 5.智能指针 6.STL的一些变化 7.右值引用和移动语义 1.左值引用和右值引用 2.左值引用和右值引用的比较 3.右值引用的使用场景和意义 4.右值引用引用左值及其一些更深入的使用场景分…...

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…...

初识java(2)

大家好&#xff0c;今天我们来讲讲java中的数据类型。 java跟我们的c语言的数据类型有一些差别&#xff0c;那么接下来我们就来看看。 一.字面常量&#xff0c;其中&#xff1a;199&#xff0c;3.14&#xff0c;‘a’&#xff0c;true都是常量将其称为字面常量。&#xff08;…...

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…...

Wonder3D本地部署到算家云搭建详细教程

Wonder3D简介 Wonder3D仅需2至3分钟即可从单视图图像中重建出高度详细的纹理网格。Wonder3D首先通过跨域扩散模型生成一致的多视图法线图与相应的彩色图像&#xff0c;然后利用一种新颖的法线融合方法实现快速且高质量的重建。 本文详细介绍了在算家云搭建Wonder3D的流程以及…...

【设计模式】【行为型模式(Behavioral Patterns)】之状态模式(State Pattern)

1. 设计模式原理说明 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;它允许对象在其内部状态发生变化时改变其行为。这个模式的核心思想是使用不同的类来表示不同的状态&#xff0c;每个状态类都封装了与该状态相关的特定行为。当对象的状态发…...

QML学习 —— 34、视频媒体播放器(附源码)

效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题 出现的问题:      DirectS…...

【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分!

【深度学习|特征增强模块】FFN&#xff08;前馈神经网络&#xff09;和E_FFN&#xff08;增强型前馈神经网络&#xff09;是transformer特征增强的重要组成部分&#xff01; 【深度学习|特征增强模块】FFN&#xff08;前馈神经网络&#xff09;和E_FFN&#xff08;增强型前馈神…...

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容&#xff0c;对应操作是&#xff1a; QString curorui->textEdit->toPlainText();然后显示到标签上&#xff0c;对应操作是&#xff1a; …...

F12抓包14_修改网页图片网页保存到本地

课程大纲 1、修改网页图片&#xff08;2种方式二选一&#xff09; 修改网页图片&#xff0c;需要定位到图片标签&#xff0c;修改<img>标签的属性。2种方法&#xff1a; 1. 修改为网络图片url。缺点&#xff1a;url失效&#xff0c;图片无法显示。 2. 修改为图片base64&a…...

源代码检测,内附实际案例

源代码安全审计是依据国标GB/T 34944-2017、GB/T 34944-2017&#xff0c;结合专业源代码扫描工具对各种程序语言编写的源代码进行安全审计。能够为客户提供包括安全编码规范咨询、源代码安全现状评测、定位源代码中存在的安全漏洞、分析漏洞风险、给出修改建议等一系列服务。 源…...

1138:将字符串中的小写字母转换成大写字母

【题目描述】 给定一个字符串&#xff0c;将其中所有的小写字母转换成大写字母。 【输入】 输入一行&#xff0c;包含一个字符串&#xff08;长度不超过100&#xff0c;可能包含空格&#xff09;。 【输出】 输出转换后的字符串。 【输入样例】 helloworld123Ha 【输出样例】…...

《C++ 人工智能模型邂逅云平台:集成之路的策略与要点全解析》

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能无疑是引领技术变革的核心力量。而 C以其卓越的性能和高效的资源利用&#xff0c;成为开发人工智能模型的有力武器。与此同时&#xff0c;云平台所提供的强大计算能力、灵活的存储资源以及便捷的服务部署&#xff0c;为人工…...

【ArcGISPro】Sentinel-2数据处理

错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集...

Unity中的简易TCP服务器/客户端

在本文中&#xff0c;我将向你介绍一个在Unity中实现的简单TCP服务器脚本,和一个简单的客户端脚本. 脚本 MyTcpServer 允许Unity应用创建一个TCP服务器&#xff0c;监听客户端的连接、异步处理客户端消息&#xff0c;并通过事件与Unity应用中的其他模块进行通信。 MyTcpServe…...

Spring Boot 3.4 正式发布,结构化日志!

1 从 Spring Boot 3.3 升级到 3.4 1.1 RestClient 和 RestTemplate 新增对 RestClient 和 RestTemplate 自动配置的支持&#xff0c;可用 Reactor Netty 的 HttpClient 或 JDK 的 HttpClient。支持的客户端优先级&#xff1a; Apache HTTP Components (HttpComponentsClient…...

技术文档,they are my collection!

工作 今天这篇文章&#xff0c;献给一直撰写技术文档的自己。我自认为是公司中最爱写文档的人了&#xff0c;我们是一个不到40人的小公司&#xff0c;公司作风没有多么严谨&#xff0c;领导也不会要求我们写技术文档。但是从入职初至今&#xff0c;我一直保持着写技术文档…...

详解Qt之QtMath Qt数学类

文章目录 QtMath详解前言QtMath简介QtMath中的函数1. 三角函数1.1 qSin1.2 qCos 2. 指数与对数函数2.1 qExp2.2 qLn 3. 幂运算与平方根3.1 qPow3.2 qSqrt QtMath的优势1. 一致性与跨平台支持2. 与Qt生态系统集成3. 简洁性 总结 QtMath详解 前言 在C的开发中&#xff0c;数学运…...

人工智能与人类:共创未来的新篇章

数年前&#xff0c;当人工智能还停留在实验室的时候&#xff0c;很少有人能想到它会如此迅速地融入我们的日常生活。如今&#xff0c;从手机上的语音助手&#xff0c;到自动驾驶汽车&#xff0c;从智能家居到医疗诊断&#xff0c;AI的身影无处不在。这让我想起了20世纪初电力普…...

4.6 JMeter HTTP信息头管理器

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 HTTP信息头管理器的位置2 常见的HTTP请求头3 添加 HTTP 信息头管理器4 应用场景 前言 在 JMeter 中&#xff0c;HTTP信息头管理器&#xff08;HTTP Header Manager&#xff09…...

河南县wap网站建设公司/海外网络推广方案

使用java代码操作oracle数据库需要下载oracle的jdbc连接桥&#xff0c;使用其连接操作。下载引入jdbc连接桥在项目中我使用的是maven构建的项目&#xff0c;由于oracle授权的关系maven源中不可以直接下载。需要到官方的网站去下载&#xff0c;然后手动添加到maven本地仓库里边。…...

做数据分析网站/百度知道官网首页登录入口

缓解空间不足&#xff0c;用软链接可以&#xff0c;以下为大致思路&#xff1a;假设系统只有一个/分区。另加一块硬盘也只有一个分区&#xff0c;挂载在/new目录中/中的/usr和/home占用空间最多&#xff0c;想把这两个目录内容都转移到新硬盘中&#xff0c;但又不想挂载两个分区…...

王也高清壁纸图片/成都百度推广账户优化

之前用飞线用旧板子飞线连接了一个wifi模块到usb0口上&#xff0c;调试ok的&#xff0c;现在新设计的板子回来了&#xff0c;wifi模块是连接在usb2口上的&#xff0c;系统起来后发现wlan0不存在&#xff0c;用lsusb查看wifi模块的usb设备竟然没有识别到。 [ 5.580165] insmo…...

做网站首页ps分辨率多少/sem竞价培训班

艺术风格转换是一种图像的合成问题&#xff0c;其中图像的内容是以另一种风格再现的。 Artistic style transfer is an image synthesis problem where the contentof an image is reproduced with the style of another. 近年来的研究表明&#xff0c;利用预训练卷积神经网络…...

网站和网页的设计原则/百度投诉中心在线申诉

– Start 点击此处观看本系列配套视频 废话少说&#xff0c;直接上代码。 package shangbo.kafka.example9;import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class App {…...

王烨玺/优化seo设置

--《人在囧途》观后感 作者&#xff1a;朱金灿 来源&#xff1a;http://blog.csdn.net/clever101 国庆假期的一个晚上突然把电卡的电用完了&#xff0c;只好借同屋的笔记本来看电影&#xff0c;选了王宝强的《人在囧途》来看。该片讲述一个充满戏剧化的回家过年故事&#xf…...