Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm kiếm trong mảng 2-D được sắp xếp trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng các dãy số làm đối số đầu tiên và một số làm đối số thứ hai. Các mảng con chứa các số được sắp xếp theo thứ tự tăng dần và không có phần tử nào của mảng con đứng trước lớn hơn bất kỳ phần tử nào của mảng con tiếp theo.

Hàm nên sử dụng thuật toán tìm kiếm nhị phân để tìm kiếm phần tử được cung cấp dưới dạng đối số thứ hai trong mảng các mảng được sắp xếp.

Nếu phần tử tồn tại, hàm phải trả về true, ngược lại là false.

Ví dụ -

Nếu mảng đầu vào là -

const arr = [
   [2, 6, 9, 11],
   [13, 16, 18, 19, 21],
   [24, 26, 28, 31]
];
const num = 21;

Sau đó, kết quả đầu ra phải là -

const output = true;

Ví dụ

Sau đây là mã -

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))

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

true