Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 정렬된 2차원 배열에서 검색하기

<시간/>

숫자 배열을 첫 번째 인수로, 숫자를 두 번째 인수로 취하는 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