开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
题目描述
给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。
来源:力扣(LeetCode)
- 示例 1
输入:names = ["Mary","John","Emma"], heights = [180,165,170]
输出:["Mary","Emma","John"]
解释:Mary 最高,接着是 Emma 和 John 。
- 示例 1
输入:names = ["Alice","Bob","Bob"], heights = [155,185,150]
输出:["Bob","Alice","Bob"]
提示:
- n == names.length == heights.length
- 1 <= n <= 103
- 1 <= names[i].length <= 20
- 1 <= heights[i] <= 105 names[i] 由大小写英文字母组成 heights 中的所有值互不相同
思路分析
根据题意可知,题目给出一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights;并且,两个数组的长度相同,都是n;两个数组中,相同下标的名字对应着相同下标的身高;现在需要我们根据身高从大到小排序,将名字重新排列为一个数组返回出来。
首先,我们需要将两个数组同时循环,组成一个二维数组,名字name和身高height相对应起来。一个数组的话就比较好运算,身高和名字也能相对应,找到身高就能找到相对应的名字。利用数组的sort()排序方法,根据身高从大到小排序,身高比较大的数组就排在前面,身高比较小的数组就排在后面。这样的数组就差不多了,剩下的只需要将名字按顺序取出来就可以了。现在可以使用数组任何的循环方法,这里就使用forEach方法,按顺序将名字取出来放到一个新的数组里面就可以了。
AC代码
function solution(names, heights) {
let nameAndHeight = [];
for(let i=0; i<names.length; i++) {
nameAndHeight[i] = [names[i], heights[i]]
}
nameAndHeight.sort((a, b) => b[1] - a[1] );
let newArr = [];
nameAndHeight.forEach( item => {
newArr.push(item[0]);
})
console.log(newArr);
}
let names = ["Mary","John","Emma"], heights = [180,165,170];
solution(names, heights);