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

การหา Peak Element (ค่าที่มากกว่าตัวข้างเคียง) ใน JavaScript

บทความนี้สาธิตการหา peak element ในอาร์เรย์ (ค่าที่มากกว่าทั้งซ้ายและขวา) ใช้ binary search แบบปรับเปลี่ยน

ตัวอย่าง

arr = [3, 6, 7, 9, 8, 2, 5] -> peak = 9

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

const arr = [3, 6, 7, 9, 8, 2, 5];

const greaterThanAdjacent = (arr = [], start = 0, end = arr.length) => {
  let mid = start + Math.floor((end - start) / 2);
  let curr = arr[mid];
  let prev = mid - 1 < 0 ? -Infinity : arr[mid - 1];
  let next = mid + 1 > arr.length - 1 ? -Infinity : arr[mid + 1];
  if (curr > prev && curr > next) {
    return arr[mid];
  }
  if (curr < next) {
    return greaterThanAdjacent(arr, mid + 1, end);
  }
  if (curr > next) {
    return greaterThanAdjacent(arr, start, mid - 1);
  }
  return null;
};

console.log(greaterThanAdjacent(arr));

ผลลัพธ์

9

คำอธิบาย

Binary search peak: หาก mid < next -> peak ต้องอยู่ขวา (เพราะขึ้น) หาก mid < prev -> peak อยู่ซ้าย

Time: O(log n), Space: O(log n) เนื่องจาก recursion (สามารถทำ iterative ได้)

ขอบเขต: ใช้ -Infinity สำหรับ out-of-bounds