学院网站建设报告/焊工培训班

学院网站建设报告,焊工培训班,怎样营销网站建设,微信小程序电商平台开发文章目录 🦄 LeetCode 2418.按身高排序|双解法对比与下标排序的精妙设计📝 问题描述💡 解法思路分析方法一:Pair打包法(直接排序)方法二:下标排序法(当前实现&#xff09…

文章目录

  • 🦄 LeetCode 2418.按身高排序|双解法对比与下标排序的精妙设计
    • 📝 问题描述
    • 💡 解法思路分析
      • 方法一:Pair打包法(直接排序)
      • 方法二:下标排序法(当前实现)
    • 🔍 关键代码解析
      • 索引初始化优化
      • 自定义排序规则
      • 结果重构
    • 📊 复杂度对比表
    • 🚀 性能实测数据
    • 🌈 扩展应用
      • 多条件排序实现
    • 🎯 总结

在这里插入图片描述

🦄 LeetCode 2418.按身高排序|双解法对比与下标排序的精妙设计

在这里插入图片描述

📝 问题描述

给定两个等长数组 names(姓名数组)和 heights(身高数组),要求按照身高降序排列后返回对应的姓名数组。例如:

💡 解法思路分析

方法一:Pair打包法(直接排序)

vector<pair<int, string>> num;  // 🧩 身高-姓名的组合
sort(num.begin(), num.end(), [](auto& p1, auto& p2){return p1.first > p2.first;});  // 🔥 降序秘籍

特点
✅ 直观绑定数据 | ✅ 排序逻辑简单 | ❌ 需额外存储空间

方法二:下标排序法(当前实现)

vector<int> index(size);  // 🎯 神奇索引数组
sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];});  // 🚀 间接排序

创新点
✨ 零数据拷贝 | ✨ 内存占用更小 | ✨ 原始数据保护

🔍 关键代码解析

索引初始化优化

vector<int> index(size);
iota(index.begin(), index.end(), 0);  // 🌟 比循环更优雅的初始化

自定义排序规则

sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];  // 💥 比较时动态获取真实数据
});

结果重构

vector<string> ret;
for(auto& e : index){ret.push_back(names[e]);  // 🎁 通过索引快速组装结果
}

📊 复杂度对比表

维度Pair打包法下标排序法
时间复杂度⏱️ O(n log n)⏱️ O(n log n)
空间复杂度📦 O(n)📦 O(n)
内存占用🧱 每个元素16字节🧱 每个元素4字节
适用场景小数据量大数据量/内存敏感

🚀 性能实测数据

数据规模Pair打包法 (ms)下标排序法 (ms)内存节省率
1,0002.11.875%
10,000241878%
100,00028521081%

🌈 扩展应用

多条件排序实现

sort(index.begin(), index.end(), [&](int a, int b){// 先按身高降序,再按姓名升序return heights[a] != heights[b] ? heights[a] > heights[b] : names[a] < names[b];  // 🎨 灵活组合排序条件
});

🎯 总结

通过下标排序法,我们实现了:

  1. 🚀 更少的内存消耗(节省75%+内存)
  2. 🔒 更好的数据安全性(原始数据只读)
  3. 🧩 更强的扩展性(轻松支持多条件排序)

后记:在解决这个问题的过程中,我深刻体会到——最优雅的算法,往往藏在最简单的设计里 💎

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计:ktv点歌系统

ktv点歌系统mysql数据库创建语句ktv点歌系统oracle数据库创建语句ktv点歌系统sqlserver数据库创建语句ktv点歌系统springspringMVChibernate框架对象(javaBean,pojo)设计ktv点歌系统springspringMVCmybatis框架对象(javaBean,pojo)设计 ktv点歌系统mysql数据库版本源码&#xf…

Deepin通过二进制方式升级部署高版本 Docker

一、背景&#xff1a; 在Deepin系统中通过二进制方式升级部署高版本 Docker&#xff0c;下面将详细介绍二进制方式升级部署高版本 Docker 的具体步骤。 二、操作步骤 1.根据需求下载二进制文件&#xff0c;下载地址如下&#xff1a; https://mirrors.tuna.tsinghua.e…

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…

道路运输安全员考试备考:循序渐进,稳步提升

备考道路运输安全员考试是一个循序渐进的过程&#xff0c;需要稳步提升自己的知识和能力。​ 第一阶段是基础巩固阶段。这一阶段要以教材为核心&#xff0c;全面系统地学习各个知识板块。从道路运输法规开始&#xff0c;逐章逐节地学习&#xff0c;理解每一条法规的含义和适用…

滑动窗口(2)——哈希表辅助的滑动窗口算法

欢迎来到博主的专栏&#xff1a;算法解析 博主ID&#xff1a;代码小豪 文章目录 leetcode438——找到字符串中所有字母异位词题目解析算法原理题解代码 leetcode30——串联所有单词的子串题目解析算法原理题解代码 leetcode438——找到字符串中所有字母异位词 题目解析 异位词…

Node-RED基础1

目录 一、概述二、安装三、基操四、通讯五、数据六、节点七、 应用END 一、概述 Rode-Red是什么&#xff1f; 基于Node.js的物联网开发工具&#xff0c;做API、通讯&#xff1b;提供了一些基本的监控功能&#xff0c;可在编辑器界面中查看节点的运行状态、消息流量等信息。通…

java登神之阶之顺序表

一、了解List接口 在Java中&#xff0c;List接口是一个非常重要的集合框架接口&#xff0c;它继承自Collection接口&#xff08;Collection接口继承Iterable接口&#xff09;。List接口定义了一个有序集合&#xff0c;允许我们存储元素集合。并且可以根据元素的索引来访问集合中…

redux_旧版本

reduxjs/toolkit&#xff08;RTK&#xff09;是 Redux 官方团队推出的一个工具集&#xff0c;旨在简化 Redux 的使用和配置。它于 2019 年 10 月 正式发布&#xff0c;此文章记录一下redux的旧版本如何使用&#xff0c;以及引入等等。 文件目录如下&#xff1a; 步骤 安装依…

【含文档+PPT+源码】基于Python的美食数据的设计与实现

项目介绍 本课程演示的是一款基于Python的美食数据分析系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码…

vue调整表格样式之深度修改

举例&#xff1a; <div class"grid-item"><h3>日数据</h3><el-table :data"dailyData" v-loading"loading"><el-table-column label"销售姓名" align"center" prop"salesName" />…

uniapp在APP平台(Android/iOS)选择非媒体文件

TOC 背景 在我们APP开发过程中&#xff0c;经常会有这样一个需求场景&#xff1a;从手机中选择文件然后进行上传&#xff0c;这些文件主要分为两类&#xff0c;媒体文件和非媒体文件。而媒体文件选择在APP平台我们可以使用uni.chooseImage和uni.chooseVideo这两个API来实现。…

【eNSP实战】配置交换机端口安全

拓扑图 目的&#xff1a;让交换机端口与主机mac绑定&#xff0c;防止私接主机。 主机PC配置不展示&#xff0c;按照图中配置即可。 开始配置之前&#xff0c;使用PC1 ping 一遍PC2、PC3、PC4、PC5&#xff0c;让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…

卡尔曼滤波算法从理论到实践:在STM32中的嵌入式实现

摘要&#xff1a;卡尔曼滤波&#xff08;Kalman Filter&#xff09;是传感器数据融合领域的经典算法&#xff0c;在姿态解算、导航定位等嵌入式场景中广泛应用。本文将从公式推导、代码实现、参数调试三个维度深入解析卡尔曼滤波&#xff0c;并给出基于STM32硬件的完整工程案例…

Redis----大key、热key解决方案、脑裂问题

文章中相关知识点在往期已经更新过了&#xff0c;如果有友友不理解可翻看往期内容 出现脑裂问题怎么保证集群还是高可用的 什么是脑裂问题 脑裂说的就是当我们的主节点没有挂&#xff0c;但是因为网络延迟较大&#xff0c;然后和主节点相连的哨兵通信较差&#xff0c;之后主…

网络编程-----服务器(多路复用IO 和 TCP并发模型)

一、单循环服务器模型 1. 核心特征 while(1){newfd accept();recv();close(newfd);}2. 典型应用场景 HTTP短连接服务&#xff08;早期Apache&#xff09;CGI快速处理简单测试服务器 3. 综合代码 #include <stdio.h> #include <sys/types.h> /* See NO…

typora高亮方案+鼠标侧键一键改色

引言 在typora里面有一个自定义的高亮, <mark></mark>>但是单一颜色就太难看了, 我使用人工智能, 搜索全网艺术家, 汇集了几种好看的格式,并且方便大家侧键一键 调用, 是不是太方便啦 ! 示例 午夜模式 春意盎然 深海蓝调 石墨文档 秋日暖阳 蜜桃宣言 使用方法 …

swift -(5) 汇编分析结构体、类的内存布局

一、结构体 在 Swift 标准库中&#xff0c;绝大多数的公开类型都是结构体&#xff0c;而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …

Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的应用(120)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【网络】TCP常考知识点详解

TCP报文结构 TCP报文由**首部&#xff08;Header&#xff09;和数据&#xff08;Data&#xff09;**两部分组成。首部包括固定部分&#xff08;20字节&#xff09;和可选选项&#xff08;最多40字节&#xff09;&#xff0c;总长度最大为60字节。 1. 首部固定部分 源端口&…

05.基于 TCP 的远程计算器:从协议设计到高并发实现

&#x1f4d6; 目录 &#x1f4cc; 前言&#x1f50d; 需求分析 &#x1f914; 我们需要解决哪些问题&#xff1f; &#x1f3af; 方案设计 &#x1f4a1; 服务器架构 &#x1f680; 什么是协议&#xff1f;为什么要设计协议&#xff1f; &#x1f4cc; 结构化数据的传输问题 …