资讯详情

按身高排序

📅 2026/10/5 16:05:02 | 华诺云谱 👁 阅读
按身高排序
题目描述给你一个字符串数组namesnamesnames和一个由互不相同的正整数组成的数组heightsheightsheights。两个数组的长度均为nnn。对于每个下标iiinames[i]names[i]names[i]和heights[i]heights[i]heights[i]表示第 i 个人的名字和身高。请按身高 降序 顺序返回对应的名字数组namesnamesnames。示例 1输入names [“Mary”,“John”,“Emma”], heights [180,165,170]输出[“Mary”,“Emma”,“John”]解释Mary 最高接着是 Emma 和 John 。示例 2输入names [“Alice”,“Bob”,“Bob”], heights [155,185,150]输出[“Bob”,“Alice”,“Bob”]解释第一个 Bob 最高然后是 Alice 和第二个 Bob。解法 1在这里不能直接对身高数组排序因为对身高数组排序后通过身高就找不到对应的名字了。所以我们先创建一个存放二元组的数组二元组是身高名字然后遍历身高数组将身高和对应的名字存到数组中最后按照身高对这个数组排序遍历这个数组按顺序取出所有的名字即可。这种做法在数组中存储了身高和名字两种信息比较耗费空间classSolution{usingPISpairint,string;public:vectorstringsortPeople(vectorstringnames,vectorintheights){vectorPISperson;for(inti0;iheights.size();i){person.push_back({heights[i],names[i]});}sort(person.begin(),person.end(),[](constPISp1,constPISp2){returnp1.firstp2.first;});vectorstringret;for(auto[height,name]:person){ret.push_back(name);}returnret;}};解法 2创建一个哈希表保存身高和名字的映射关系。先遍历身高数组将身高和名字的映射关系记录到哈希表里然后对身高数组排序再遍历身高数组从哈希表里提取出对应的名字即可。这种方法的缺陷是哈希表不能存重复的值如果存在两个人他们都的身高相同就找不到另外一个人的身高了此时哈希表的valvalval要保存一个字符串数组比较耗空间classSolution{vectorstringsortPeople(vectorstringnames,vectorintheights){unordered_mapint,stringhash;for(inti0;iheights.size();i){hash[heights[i]]names[i];}sort(heights.begin(),heights.end(),greaterint());vectorstringret;for(intheight:heights){ret.push_back(hash[height]);}returnret;}};解法 3对数组排序但是又不希望影响原来的映射关系的场景我们可以选择创建一个下标数组解决具体的步骤是创建一个下标数组按照题目要求对下标数组排序通过排完序的下标数组提取出原数组的信息以示例111为例下标数组刚开始保存了所有人的下标classSolution{vectorstringsortPeople(vectorstringnames,vectorintheights){vectorintindices(heights.size());for(inti0;iheights.size();i){indices[i]i;}sort(indices.begin(),indices.end(),[](inti,intj){returnheights[i]heights[j];});vectorstringret;for(inti:indices){ret.push_back(names[i]);}returnret;}};
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑