leetcode2418.按身高排序

server/2024/10/21 7:53:33/

题目描述:

给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。

对于每个下标 inames[i] 和 heights[i] 表示第 i 个人的名字和身高。

请按身高 降序 顺序返回对应的名字数组 names 。

示例一:
 

输入:names = ["Mary","John","Emma"], heights = [180,165,170]
输出:["Mary","Emma","John"]
解释:Mary 最高,接着是 Emma 和 John 。

示例二:
 

输入:names = ["Alice","Bob","Bob"], heights = [155,185,150]
输出:["Bob","Alice","Bob"]
解释:第一个 Bob 最高,然后是 Alice 和第二个 Bob 。

题目解析:

首先这道题的解决方法不止一种,我们这里有金典的两种:

1.哈希映射法:

就是创建一个身高:名字的哈希表,先将每个人名字和身高的对应信息存入哈希表中,然后再将升

高降序排序,最后再将升高对应的哈希表中的名字取出,就返回了对应的按身高降序排序的名字,

这种方法是最常见的,但并不是最优的。

对应的代码如下:

class Solution 
{
public:vector<string> sortPeople(vector<string>& names, vector<int>& heights) {int n = names.size();unordered_map<int ,string> map;//对应关系的放入:for(int i = 0;i < n;i++){map[heights[i]] = names[i];}//升高降序排列sort(heights.begin(),heights.end(),greater());//取出对应的姓名:for(int i = 0;i < n;i++){names[i] = map[heights[i]];}return names;}
};

2.下标排序法:

这种方法才是本道题的最优解,设置一个下标数组,通过对身高的排序对下标数组进行排序,然后

再遍历一遍下标数组,将名字对应的下标按降序,插入到一个新的字符串数组中,对应代码如下:
 

class Solution 
{
public:vector<string> sortPeople(vector<string>& names, vector<int>& heights) {//创建一个下标数组vector<string> ret;int n = heights.size();vector<int> index(n);for(int i = 0;i < n;i++){index[i] = i;}//对下标数组进行排序sort(index.begin(),index.end(),[&](int x,int y){return heights[x] > heights[y];});//提取结果for(int i = 0;i < n;i++){ret.push_back(names[index[i]]);}return ret;}
};

通过一个lamda表达式来改变index的排序策略,从而通过index数组的下标记录来队名字有了降序

的排序。

这就是这道题的两种解法。


http://www.ppmy.cn/server/18139.html

相关文章

信号量和互斥锁的区别

信号量和互斥锁都是用于多线程编程中的同步机制&#xff0c;但它们在用途和操作上存在一些差异。具体分析如下&#xff1a; 用途&#xff1a;互斥锁&#xff08;Mutex&#xff09;主要用于实现线程间的互斥&#xff0c;即确保同一时刻只有一个线程能够访问共享资源或临界区。它…

LeetCode39:组合总和

题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

JavaScript-Vue入门

本文主要测分享Vue的一些基础 Vue简介 Vue.js 是一个构建数据驱动的 web 界面的渐进式框架。它的主要目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 下是一些 Vue 的主要特点和概念&#xff1a; 1. 响应式数据绑定&#xff1a;Vue 使用基于 HTML 的模板语法…

【MySQL】DML

1、DML简介 DML&#xff08;Data Manipulation Language、数据操作语言&#xff09;&#xff0c;用于添加、删除、更新和查询数据库记录&#xff0c;并检查数据完整性。 2. 添加数据 2.1 使用关键字 使用 INSERT 语句向表中插入数据。使用 VALUES语句添加 2.2 使用情况 2.2…

【C++】封装、继承和多态

引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;Object Oriented Programming&#xff09;已经成为一种广泛应用的编程范式。C作为一种支持面向对象编程的语言&#xff0c;在封装、继承和多态方面提供了强大的特性。本文将介绍C中的封装、继承和多态概念&#xff…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

科技论文网站:中国科技论文在线

文章目录 1. Intro2. Main3. Cons Evaluation彩蛋&#xff1a;科学素质 这是作者最后一次发 这种类型的宣传 科普文章 1. Intro 中国科技论文在线是经教育部批准&#xff0c;由教育部科技发展中心主办&#xff0c; 利用现代信息技术手段&#xff0c;打破传统出版物的概念&…

LeetCode 每日一题 ---- 【2739.总行驶距离】

LeetCode 每日一题 ---- 【2739.总行驶距离】 2739.总行驶距离解题方法&#xff1a;模拟 2739.总行驶距离 解题方法&#xff1a;模拟 根据题意进行模拟&#xff0c;主邮箱每减少 5 升油&#xff0c;汽车就可以行驶 10 公里&#xff0c;同时副油箱需要向主油箱注入 1 升油&…