Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

หาตัวเลขที่มากที่สุดอันดับ 3 ในอาร์เรย์ (Third Maximum) ด้วย JavaScript

ปัญหา

รับอาร์เรย์ตัวเลข หาตัวเลขที่มากที่สุดอันดับ 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