ปัญหา
รับอาร์เรย์ตัวเลข หาตัวเลขที่มากที่สุดอันดับ 3 (นับค่าที่ไม่ซ้ำ) หากไม่มี 3 ค่า ให้คืนค่าสูงสุด
ตัวอย่าง
const arr = [34, 67, 31, 87, 12, 30, 22];
ค่าที่ไม่ซ้ำเรียงมากไปน้อย: 87, 67, 34, 31, 30, 22, 12 → อันดับ 3 คือ 34
โค้ดตัวอย่าง
const arr = [34, 67, 31, 87, 12, 30, 22];
const findThirdMax = (arr = []) => {
const map = {};
let j = 0;
for (let i = 0, l = arr.length; i < l; i++) {
if(!map[arr[i]]){ map[arr[i]] = true; } else { continue; }
arr[j++] = arr[i];
}
arr.length = j;
let result = -Infinity;
if (j < 3) { for (let i = 0; i < j; ++i) { result = Math.max(result, arr[i]); } return result; }
else { arr.sort((prev, next) => next - prev); return arr[j - 3]; }
};
console.log(findThirdMax(arr));
ผลลัพธ์
34