1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| 输入:arr = [40,10,20,30] 输出:[4,1,2,3] 解释:40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。
输入:arr = [100,100,100] 输出:[1,1,1] 解释:所有元素有相同的序号。
输入:arr = [37,12,28,9,100,56,80,5,12] 输出:[5,3,4,2,8,6,7,1,3]
解答: 方法1,建立索引: var arrayRankTransform = function(arr) { const localArr = JSON.parse(JSON.stringify(arr)) const sortArr = arr.sort((a, b) => a - b) let num = 0 let prev = null const mapArr = sortArr.map(i => { if (prev !== i) { prev = i num++ } return { label: i, value: num } }) const outArr = localArr.map(i => { const result = mapArr.find(j => j.label === i) return result.value }) return outArr };
方法2,进一步优化: var arrayRankTransform = function(arr) { const nums = [...new Set(arr)].sort((a, b) => a - b) const mp = new Map() for (let i = 0; i < nums.length; i ++ ) mp.set(nums[i], i)
return arr.map(item => mp.get(item) + 1) };
|