今日の質問:関数find(nums)を実装して、numsで3番目に大きい値の添え字を返します。数値が3つ未満の場合は、-1を返し
、比較的単純な重複排除方法を使用します。
問題があります:3番目に大きい数が数回繰り返される数である場合、3番目に大きい数の添え字は何ですか?ここでは解決策はありません。誰かが良い方法を提供してくれることを願っています。
const find = nums => {
if (nums.length < 3) {
return -1
}
//利用ES6特性进行数组去重
const newNums = [...new Set (nums)]
for (let i = 0; i<newNums.length-1; i++) {
for (let j = 0; j<newNums.length-1-i;j++) {
//判断前一个大于后一个数时进行交换
if (newNums[j] > newNums[j + 1]) {
let temp = newNums[j]
newNums[j] = newNums[j + 1]
newNums[j + 1] = temp
}
}
}
return nums.indexOf(newNums[2])
}
console.log (find([3,10,8,9,9,10,10,18,8]))