เราจำเป็นต้องเขียนฟังก์ชัน 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