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

การหายอดสูงสุดของอาร์เรย์ที่มียอดตรงกลางใน JavaScript

อาร์เรย์ที่มียอดตรงกลาง (Centrally Peaked Array)

เราเรียกอาร์เรย์ arr ว่าเป็น อาร์เรย์ที่มียอดตรงกลาง หากคุณสมบัติต่อไปนี้เป็นจริง

  • arr.length >= 3
  • มีบาง i ที่ 0 < i < arr.length - 1 ที่ทำให้
    • arr[0] < arr[1] < ... arr[i-1] < arr[i]
    • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์เดียว

อาร์เรย์อินพุตเป็นอาร์เรย์ที่มียอดตรงกลาง ฟังก์ชันควรคืนค่าดัชนีของยอด (peak index) ของอาร์เรย์ที่มียอดตรงกลางนี้

ตัวอย่างเช่น หากอินพุตคือ

อินพุต

const arr = [4, 6, 8, 12, 15, 11, 7, 4, 1];

เอาต์พุต

const output = 4;

คำอธิบายเอาต์พุต

เพราะองค์ประกอบที่ดัชนี 4 (15) เป็นองค์ประกอบยอดของอาร์เรย์นี้

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

const arr = [4, 6, 8, 12, 15, 11, 7, 4, 1];
const findPeak = (arr = []) => {
if (arr.length < 3) {
return -1;
}
const helper = (low, high) => {
if (low > high) {
return -1;
}
const middle = Math.floor((low + high) / 2);
if (arr[middle] <= arr[middle + 1]) {
return helper(middle + 1, high);
}
if (arr[middle] <= arr[middle - 1]) {
return helper(low, middle - 1);
}
return middle;
};
return helper(0, arr.length - 1);
};
console.log(findPeak(arr));

ผลลัพธ์

4