Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค้นหาในอาร์เรย์ 2 มิติที่จัดเรียงใน JavaScript


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