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

หาค่าที่ใหญ่เป็นอันดับสองในอาร์เรย์ JavaScript

อัลกอริธึมหาค่าที่สองใหญ่สุดในอาร์เรย์

วนลูปครั้งเดียว เก็บค่ามากที่สุดและมากอันดับสองไว้ในตัวแปร

ตัวอย่างโค้ด

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];