อาร์เรย์ที่มียอดตรงกลาง (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