เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของอาร์เรย์ของตัวเลขเป็นอาร์กิวเมนต์แรกและตัวเลขเป็นอาร์กิวเมนต์ที่สอง อาร์เรย์ย่อยประกอบด้วยตัวเลขที่เรียงตามลำดับที่เพิ่มขึ้น และไม่มีองค์ประกอบของอาร์เรย์ย่อยก่อนหน้าที่มากกว่าองค์ประกอบใดๆ ของอาร์เรย์ย่อยที่ตามมา
ฟังก์ชันควรใช้อัลกอริธึมการค้นหาแบบไบนารีเพื่อค้นหาองค์ประกอบที่ให้ไว้เป็นอาร์กิวเมนต์ที่สองในอาร์เรย์ที่จัดเรียงของอาร์เรย์
หากมีองค์ประกอบอยู่ ฟังก์ชันควรคืนค่า true หรือ false มิฉะนั้น
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตเป็น −
const arr = [ [2, 6, 9, 11], [13, 16, 18, 19, 21], [24, 26, 28, 31] ]; const num = 21;
จากนั้นผลลัพธ์ควรเป็น −
const output = true;
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [ [2, 6, 9, 11], [13, 16, 18, 19, 21], [24, 26, 28, 31] ]; const num = 21; const search2D = (array = [], target) => { const h = array.length; const w = h > 0 ? array[0].length : 0; if (h === 0 || w === 0) { return false; } const arr = getArr(); if (!arr) { return false; } return binarySearch(arr, target) !== null; function getArr() { for (let i = 0; i < h; i++) { let arr = array[i]; if (arr[0] <= target && target <= arr[arr.length - 1]) { return arr; } } return null; } function binarySearch(arr, t) { let left = 0; let right = arr.length - 1; while (left <= right) { if (arr[left] === t) { return left; } if (arr[right] === t) { return right; } let mid = Math.floor((left + right) / 2); if (arr[mid] === t) { return mid; } if (arr[mid] < t) { left = mid + 1; } else if (arr[mid] > t) { right = mid - 1; } } return null; } }; console.log(search2D(arr, num))
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
true