关于leetcode:力扣之按身高排序
题目形容给你一个字符串数组 names ,和一个由 互不雷同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 示意第 i 集体的名字和身高。 请按身高 降序 程序返回对应的名字数组 names 。 示例 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 。力扣原题目地址:https://leetcode.cn/problems/...思路解法剖析题目中有两块信息,别离是对应的身高数组和姓名数组,不过最终要求的后果却是,依照身高数组的排序返回对应的姓名数组。一想到排序,咱们首先要想到js中的sort(function(a-b){})排序办法。不过平时应用这个api的时候,咱们经常是用做一维数组的排序。实际上二维数组也能够应用这个api的,为什么会提到二维数组呢?因为单个的信息蕴含两个变量:姓名和身高。所以应用二维数组最合适思路步骤创立一个二维数组,二维数组中的每一项又是一个小数组,一个个的小数组中都寄存两个值,某人的名字和身高。而后依据身高排序将排好序的二维数组遍历,取出其中的名字即可代码应用Map汇合转二维数组function sortPeople(names, heights) { // 留神heights数组没有反复项(names数组可能有反复项) // 两个对应数组,等同长度,取谁的长度都行 let n = names.length // 首先将名字身高组合成一个map汇合 let map = new Map() for (let i = 0; i < n; i++) { map.set(heights[i], names[i]) // 取谁,value就是谁 } // 而后将map汇合转换成二维数组,并调用原生js的api排序 let sort2WeiArr = [...map].sort(function (a, b) { return b[0] - a[0] // 记不清a-b还是b-a没关系,打印看下就行了 }) // 排好序的二维数组再遍历,取出名字项即可 let result = sort2WeiArr.map((item) => { return item[1] }) return result}const res = sortPeople(names, heights)console.log('排序后果', res)tips: Map汇合转二维数组:[...Map] 这样写就解构转二维数组了 ...