อัลกอริธึมหาค่าที่สองใหญ่สุดในอาร์เรย์
วนลูปครั้งเดียว เก็บค่ามากที่สุดและมากอันดับสองไว้ในตัวแปร
ตัวอย่างโค้ด
var numbers = [10, 50, 80, 60, 89];
var firstLargerNumber = Number.MIN_SAFE_INTEGER;
var secondLargerNumber = firstLargerNumber;
for (var tempNumber of numbers) {
if (tempNumber > firstLargerNumber) {
secondLargerNumber = firstLargerNumber;
firstLargerNumber = tempNumber;
} else if (tempNumber > secondLargerNumber) {
secondLargerNumber = tempNumber;
}
}
console.log("The second largest number = " + secondLargerNumber); // 80
วิธีรัน
node fileName.js
ผลลัพธ์
The second largest number = 80
คำอธิบาย
- เริ่มต้นค่าต่ำสุดด้วย
Number.MIN_SAFE_INTEGER - ถ้าเจอค่ามากกว่าสุด → เก่าสุดกลายเป็นอันดับ2 ค่าใหม่กลายเป็นอันดับ1
- ถ้าเจอค่าระหว่างอันดับ1-2 → กลายเป็นอันดับ2
- Time: O(n), Space: O(1)
วิธีง่ายกว่า (แต่ช้ากว่า): เรียงลำดับแล้วเอาตัวก่อนสุดท้าย
const secondLargest = [...numbers].sort((a, b) => a - b).slice(-2)[0];
// หรือ
const uniqueSorted = [...new Set(numbers)].sort((a, b) => a - b);
const second = uniqueSorted[uniqueSorted.length - 2];