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

从LeetCode高频题看C++ sort的进阶用法:如何优雅地给坐标点或区间排序?

从LeetCode高频题看C sort的进阶用法如何优雅地给坐标点或区间排序在算法面试中排序往往是解决问题的第一步。当面对二维坐标点、时间区间或自定义数据结构时如何高效地实现特定排序规则成为区分普通开发者与高手的关键。C的sort函数配合vectorpairint,int或vectorvectorint容器能优雅处理90%的LeetCode区间类问题——从经典的56题区间合并到253题会议室II再到973题最接近原点的K个点背后都藏着对排序规则的深刻理解。本文将带你拆解三个典型问题场景逐步推导出问题→数据结构→排序规则的完整思维链条。不同于基础语法教程我们更关注如何根据问题特征设计排序策略以及Lambda表达式与自定义比较函数在实际编码中的微妙差异。1. 区间排序从LeetCode 56题看双维度排序策略LeetCode 56题要求合并所有重叠区间输入示例为[[1,3],[2,6],[8,10],[15,18]]。解决这类问题的第一步永远是排序——但应该按起始点升序还是降序是否需要考虑结束点1.1 基础排序方案默认的sort对vectorvectorint会按字典序排列vectorvectorint intervals {{1,3},{8,10},{15,18},{2,6}}; sort(intervals.begin(), intervals.end()); // 结果[[1,3],[2,6],[8,10],[15,18]]这种排序已经满足多数区间问题的需求但存在两个潜在问题当起始点相同时结束点的排序可能影响后续处理效率某些特殊场景需要按结束点排序1.2 自定义比较函数进阶更精确的控制需要自定义比较规则。以下是三种实现方式的对比实现方式语法示例适用场景外部比较函数static bool cmp(const vectorint a, const vectorint b){...}需要复用的复杂比较逻辑Lambda表达式sort(intervals.begin(), intervals.end(), [](auto a, auto b){...});简单临时比较规则函数对象struct { bool operator()(const auto a, const auto b) const {...} };需要维护状态的比较关键技巧在LeetCode中比较函数必须声明为static这是类成员函数作为回调的限制。1.3 性能优化实践对于百万级数据比较函数的实现方式会影响性能// 较慢的实现多次访问vector元素 static bool cmp(const vectorint a, const vectorint b) { return a[0] b[0] ? a[1] b[1] : a[0] b[0]; } // 更快的实现使用引用避免拷贝 static bool cmp(const vectorint a, const vectorint b) { return a.front() b.front() ? a.back() b.back() : a.front() b.front(); }实测显示第二种写法在1M数据量时能快15%-20%。2. 坐标点排序LeetCode 973题的启示973题要求找出离原点最近的K个点这引出了另一个经典问题如何高效计算并比较欧式距离2.1 距离计算优化直接使用sqrt(x²y²)需要开方运算实际上比较距离平方即可// 不推荐包含冗余计算 sort(points.begin(), points.end(), [](const auto a, const auto b){ return sqrt(a[0]*a[0] a[1]*a[1]) sqrt(b[0]*b[0] b[1]*b[1]); }); // 推荐比较平方距离 sort(points.begin(), points.end(), [](const auto a, const auto b){ return a[0]*a[0] a[1]*a[1] b[0]*b[0] b[1]*b[1]; });2.2 数据结构选择vectorpairint,int相比vectorvectorint有显著优势vectorpairint, int points {{1,3}, {-2,2}, {5,8}, {0,1}}; sort(points.begin(), points.end(), [](const auto a, const auto b){ return a.first*a.first a.second*a.second b.first*b.first b.second*b.second; });优势对比内存占用减少约30%访问速度提升10-15%代码可读性更好2.3 部分排序技巧当只需要前K个元素时partial_sort比完整排序更高效vectorvectorint points {{1,3}, {-2,2}, {5,8}, {0,1}}; partial_sort(points.begin(), points.begin()K, points.end(), [](const auto a, const auto b){ return a[0]*a[0] a[1]*a[1] b[0]*b[0] b[1]*b[1]; });时间复杂度从O(nlogn)降至O(nlogk)当k较小时性能提升明显。3. 时间区间调度LeetCode 253题的多角度解法会议室II要求计算需要的最少会议室数量这需要同时考虑开始时间和结束时间的排序策略。3.1 双指针排序法核心思路是将所有时间点标记为开始或结束并排序vectorpairint, bool events; // true表示开始时间 for(auto interval : intervals) { events.emplace_back(interval[0], true); events.emplace_back(interval[1], false); } sort(events.begin(), events.end(), [](const auto a, const auto b){ return a.first b.first ? !a.second : a.first b.first; });这里有个精妙的排序规则时间相同时结束事件排在开始事件前避免虚假冲突计数。3.2 最小堆解法另一种思路是维护活跃会议的结束时间最小堆sort(intervals.begin(), intervals.end()); priority_queueint, vectorint, greaterint minHeap; for(auto interval : intervals) { if(!minHeap.empty() minHeap.top() interval[0]) { minHeap.pop(); } minHeap.push(interval[1]); } return minHeap.size();这种解法展示了排序与其他数据结构的协同使用。4. 工程实践中的陷阱与技巧4.1 比较函数的严格弱序要求不正确的比较函数可能导致未定义行为。必须满足反自反性comp(a,a)false非对称性若comp(a,b)true则comp(b,a)false传递性若comp(a,b)且comp(b,c)则comp(a,c)错误示例// 违反严格弱序当a.firstb.first时结果不确定 sort(vec.begin(), vec.end(), [](const auto a, const auto b){ return a.first b.first; });4.2 现代C的最佳实践C17引入了结构化绑定使代码更清晰vectorpairint, string data {{1,a}, {2,b}}; sort(data.begin(), data.end(), [](const auto a, const auto b){ auto [a_num, a_str] a; auto [b_num, b_str] b; return a_num b_num; });4.3 性能对比实测数据对不同排序方式在100万数据量下的测试结果方法时间(ms)内存(MB)vectorvector42032vectorpairint,int38024数组自定义结构体35016实际项目中当性能敏感时可以考虑更底层的数据结构。

相关文章:

从LeetCode高频题看C++ sort的进阶用法:如何优雅地给坐标点或区间排序?

从LeetCode高频题看C sort的进阶用法:如何优雅地给坐标点或区间排序? 在算法面试中,排序往往是解决问题的第一步。当面对二维坐标点、时间区间或自定义数据结构时,如何高效地实现特定排序规则成为区分普通开发者与高手的关键。C的…...

HS2-HF Patch深度解析:从技术原理到高级应用实践

HS2-HF Patch深度解析:从技术原理到高级应用实践 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 破解游戏本地化与模组集成的技术挑战 在游戏模组开…...

告别环境配置烦恼:用nvm-windows一键管理多版本Node.js(附16.15.1安装实例)

告别环境配置烦恼:用nvm-windows一键管理多版本Node.js 每次接手一个老项目,看到package.json里那个陌生的Node.js版本号,是不是瞬间头大?手动安装、卸载、切换版本,还要处理各种环境变量冲突——这种日子该结束了。今…...

使用 Hermes Agent 自定义提供方快速接入 Taotoken 聚合服务

使用 Hermes Agent 自定义提供方快速接入 Taotoken 聚合服务 1. 准备工作 在开始配置之前,请确保您已经拥有 Taotoken 平台的 API Key 和需要使用的模型 ID。这些信息可以在 Taotoken 控制台的「API 密钥管理」和「模型广场」页面获取。同时,请确认您已…...

20_《智能体微服务架构企业级实战教程》高德地图FastMCP服务之工具类封装

前言 配套视频教程: 👉《智能体微服务架构企业级实战教程》共72节 更多文章专栏内容: 👉《智能体微服务架构企业级实战教程》专栏 本文介绍了高德地图FastMCP服务中工具类的封装与测试。首先在.env和config.py中添加高德API地址与密钥配置。在utils.py中实现两个核心工…...

河北铸铁闸门厂家测评:新河县海禹等3家,不同需求该选谁?

在水利工程领域,铸铁闸门是重要的设施之一,对于众多对铸铁闸门有需求的人来说,了解不同厂家的情况十分必要。本次测评就针对河北的铸铁闸门厂家进行,参与测评的厂家有新河县海禹水利机械厂、海禹水利机械厂刘国霞、刘国霞&#xf…...

抖音直播下载终极指南:免费高效工具完整使用教程

抖音直播下载终极指南:免费高效工具完整使用教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

别再只用原理化BSDF了!用Blender节点编辑器5分钟调出高级渐变玻璃(附凹凸贴图资源)

别再只用原理化BSDF了!用Blender节点编辑器5分钟调出高级渐变玻璃(附凹凸贴图资源) 在Blender材质创作中,原理化BSDF节点因其多功能性成为许多创作者的首选。但当我们追求更专业、更具艺术感的玻璃材质时,仅依赖这个&q…...

瑞芯微(EASY EAI)RV1126B 模型转换教程示例

1. 模型转换为RKNN EASY EAI Monster支持.rknn后缀的模型的评估及运行,对于常见的tensorflow、tensroflow lite、caffe、darknet、onnx和Pytorch模型都可以通过我们提供的 toolkit 工具将其转换至 rknn 模型,而对于其他框架训练出来的模型,也…...

Windows 11终极优化指南:一键清理系统垃圾的完整解决方案

Windows 11终极优化指南:一键清理系统垃圾的完整解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

算法训练营第二十天|逆波兰表达式求值

一、做题第一想法逆波兰表达式就是后缀表达式,第一眼看不懂运算顺序。 学完思路发现:栈的经典应用题,遇到数字入栈,遇到运算符就弹出两个数计算,结果再压回栈里,特别巧妙。二、核心思路1. 遍历每一个字符串…...

POP3+SSL 协议密码应用模拟仿真实验

一、实验概述 1. 实验目的 掌握Postfix邮件发送服务、Dovecot邮件接收服务的安装与配置方法。实现POP3SSL/TLS加密传输,保障邮件接收过程的通信安全。完成客户端与服务端的邮件收发、加密接收全流程验证,理解SSL在邮件协议中的应用。 2. 实验环境 操…...

Dify 2026 API网关安全加固(内部泄露版策略树):3层鉴权链+4级流量染色+1套自动熔断SLA阈值表

更多请点击: https://intelliparadigm.com 第一章:Dify 2026 API网关安全加固全景概览 Dify 2026 版本对 API 网关层实施了深度安全重构,将零信任架构、动态策略引擎与细粒度审计追踪能力原生集成。其核心目标是阻断未授权访问、防御自动化探…...

配置OpenClaw智能体使用Taotoken作为模型供应商的步骤

配置OpenClaw智能体使用Taotoken作为模型供应商的步骤 1. 准备工作 在开始配置之前,请确保您已经拥有一个有效的Taotoken API Key。可以在Taotoken控制台的API Key管理页面创建新的密钥。同时,您需要确定要使用的模型ID,可以在模型广场查看…...

golang如何实现分布式对象存储_golang分布式对象存储实现攻略

...

echarts 和 vue-echarts 的版本不兼容。

这个报错是因为你的项目中 echarts 和 vue-echarts 的版本不兼容。 简单来说,你的项目中安装了一个新版本的 echarts(很可能是 5.x 或 6.x),但是你使用的 vue-echarts4.1.0 明确要求 echarts 的版本必须是 ^4.1.0(即 …...

Linux RT 调度器的 select_task_rq:RT 任务的CPU选择

简介在 Linux 多核 SMP 架构下,调度器不只是简单完成任务时间片分配与优先级抢占,任务创建、唤醒场景下的 CPU 核选择,是决定实时系统延迟、缓存命中率、系统负载均衡的核心环节。select_task_rq 作为调度类统一抽象接口,是内核为…...

跨境业务场景下利用Taotoken全球直连保障大模型API访问稳定性

跨境业务场景下利用Taotoken全球直连保障大模型API访问稳定性 1. 跨境业务中的API访问挑战 在涉及海外用户的业务场景中,直接调用大模型原厂API可能面临网络波动、延迟不稳定等问题。这些技术挑战主要源于跨国网络基础设施差异、运营商路由策略以及突发性网络拥塞…...

为你的开源项目选择并接入性价比最高的 Taotoken 大模型

为你的开源项目选择并接入性价比最高的 Taotoken 大模型 1. 开源项目的模型选型挑战 开源项目维护者常面临模型选型的两难困境:既要保证生成质量满足功能需求,又要控制调用成本避免预算超支。传统方案需要为每个候选模型单独注册账号、配置环境并编写适…...

突破传统相位限制:Nature Communications发表收敛相位超表面,色散调控能力提升30倍

导语近日,来自华中科技大学、北京航空航天大学、新加坡科技设计大学等机构的研究团队在《Nature Communications》上发表了一项重磅成果(https://doi.org/10.1038/s41467-026-72332-9)。他们提出了一种名为“收敛相位设计”的全新方法,成功制造出性能远超…...

2026 Temu 合规风暴:批量下架提速,凌风工具箱规避封店风险

2026 年跨境电商合规监管全面收紧,Temu 自 2025 年 11 月起升级重复铺货处罚规则,同主体店铺严重重复铺货将永久封禁且不予申诉,部分重复则面临限制上新、缩减商品数量等处罚。多数卖家仍依赖手动逐个提交下架申请,面对成百上千的…...

Cadence 17.4 CIS数据库实战:从零配置ODBC连接MySQL,让你的原理图直接关联ERP物料

Cadence 17.4 CIS数据库实战:从零配置ODBC连接MySQL,让你的原理图直接关联ERP物料 当硬件工程师在绘制原理图时,最头疼的问题之一就是无法实时获取元器件的库存状态和采购信息。传统设计流程中,工程师完成BOM后才发现关键器件缺货…...

DE10-Standard SoC开发板初体验:从零搭建Quartus 18.1环境到点亮第一个LED

DE10-Standard SoC开发板实战指南:从环境搭建到LED控制全流程解析 当你第一次拿到DE10-Standard开发板时,面对琳琅满目的接口和复杂的开发环境,可能会感到无从下手。作为一款集成了Cyclone V SoC的强大开发平台,它既能运行FPGA逻辑…...

深度解析:如何建立适合自己团队的AI能力评估矩阵?

在AI技术快速渗透各行业的今天,AI人才的专业能力衡量与团队AI实力的评估,逐渐成为企业发展的核心命题。CAIE注册人工智能工程师认证作为聚焦AI领域的专业技能等级认证,覆盖从零基础小白到企业级AI应用人才的全成长路径,其系统化的…...

Steam成就管理神器:如何快速解锁全成就的终极完整指南

Steam成就管理神器:如何快速解锁全成就的终极完整指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 还在为Steam游戏中那些遥不可及的成就而…...

如何在 Taotoken 平台快速接入并使用 OpenAI 兼容 API 进行模型调用

如何在 Taotoken 平台快速接入并使用 OpenAI 兼容 API 进行模型调用 1. 获取 Taotoken API Key 在开始调用 Taotoken 平台的 OpenAI 兼容 API 之前,您需要先获取有效的 API Key。登录 Taotoken 控制台后,进入「API 密钥」页面,点击「新建密…...

HS2-HF Patch完整指南:如何快速解锁Honey Select 2完整游戏体验

HS2-HF Patch完整指南:如何快速解锁Honey Select 2完整游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是《Honey Select 2》玩…...

数智化升级:AR 智能眼镜驱动工业运维效能革新

在工业生产领域,设备巡检精度、故障响应速度直接影响生产安全与运营效益。传统运维依赖人工经验判断,易受疲劳、技能差异影响,导致漏检、误判问题频发,而 AR 智能眼镜的出现,尤其是其搭载的 AI 识别功能,正…...

VSCode 2026启动慢到崩溃?3步禁用默认扩展+2个launch.json隐藏配置,实测首屏加载从8.4s压至1.9s

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026 启动性能优化的现状与挑战 随着 VSCode 2026 版本正式引入基于 WebAssembly 的核心启动器(vscode-wasm-bootloader)和模块化扩展预加载机制,启动时间中…...

从三星V9到长江存储G5:一文看懂2024年各家3D NAND技术路线图(附避坑指南)

2024年3D NAND技术全景解析:从架构革新到选型实战 在存储技术的军备竞赛中,3D NAND层数堆叠已进入白热化阶段。当三星V9与长江存储G5同台竞技,美光突然跳过300层直指400层,SK海力士的4D PUC又是什么黑科技?这场存储技…...