ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขที่เรียงแล้ว (เพิ่มขึ้น) arr เป็นอาร์กิวเมนต์แรก และตัวเลขเป้าหมายเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันควรค้นหา target ในอาร์เรย์ arr โดยใช้อัลกอริทึม binary search เนื่องจากอาร์เรย์เรียงแล้ว
หาก target มีอยู่ ให้คืนค่าดัชนี มิฉะนั้นคืนค่า -1
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr = [3, 5, 7, 9, 11, 13, 15, 16, 18, 21, 24, 25, 28];
const target = 13;
เอาต์พุต
const output = 5;
ตัวอย่างโค้ด
const arr = [3, 5, 7, 9, 11, 13, 15, 16, 18, 21, 24, 25, 28];
const target = 13;
const binarySearch = (arr = [], target) => {
const helper = (low, high) => {
if (low > high) return -1;
const middle = Math.floor((low + high) / 2);
if (arr[middle] === target) return middle;
if (arr[middle] < target) return helper(middle + 1, high);
return helper(low, middle - 1);
};
return helper(0, arr.length - 1);
};
console.log(binarySearch(arr, target));
ผลลัพธ์
5