เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขเป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
ฟังก์ชันควรค้นหาและส่งกลับจำนวนดังกล่าวจากอาร์เรย์ที่มากกว่าทั้งสอง ตัวเลขทางด้านขวาและตัวเลขทางด้านซ้าย หากมีองค์ประกอบดังกล่าวมากกว่าหนึ่งองค์ประกอบในอาร์เรย์ ฟังก์ชันของเราควรส่งคืนองค์ประกอบใดองค์ประกอบหนึ่ง
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตเป็น −
const arr = [3, 6, 7, 9, 8, 2, 5];
จากนั้นผลลัพธ์ควรเป็น −
const output = 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