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

JavaScript에서 회전된 정렬된 배열에서 가장 작은 요소 찾기

<시간/>

정수 배열을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

배열은 먼저 정렬된 다음 임의의 수의 요소로 회전됩니다. 함수는 배열에서 가장 작은 요소를 찾아 해당 요소를 반환해야 합니다.

유일한 조건은 이진 검색 알고리즘의 약간 조정된 버전을 사용하여 선형 시간 복잡도보다 적은 시간으로 이 작업을 수행해야 한다는 것입니다.

예를 들어 -

입력 배열이 -

인 경우
const arr = [6, 8, 12, 25, 2, 4, 5];

그러면 출력은 2가 되어야 합니다.

예시

다음은 코드입니다 -

const arr = [6, 8, 12, 25, 2, 4, 5];
const findMin = (arr = []) => {
   let temp;
   let min = 0;
   let max = arr.length - 1;
   let currentMin = Number.POSITIVE_INFINITY;
   while (min <= max) {
      temp = (min + max) >> 1;
      currentMin = Math.min(currentMin, arr[temp]);
      if (arr[min] < arr[temp] && arr[temp] <= arr[max] || arr[min] > arr[temp]) {
         max = temp - 1;
      } else if (arr[temp] === arr[min] && arr[min] === arr[max]) {
         let guessNum = arr[temp];
         while (min <= max && arr[min] === guessNum) {
            min++;
         }
      } else {
         min = temp + 1;
      }
   }
   return currentMin;
};
console.log(findMin(arr));

출력

다음은 콘솔 출력입니다 -

2