이진 검색 기법

사용 시기: 정렬된 목록 또는 배열에서 요소를 검색하는 데 사용됩니다. O(n)에서 O(log n)으로 시간 복잡도를 줄입니다.

정황:
입력을 정렬해야 합니다.

단계:
  • 왼쪽 인덱스 = 0, 오른쪽 인덱스 = 길이 - 1로 설정합니다.
  • 중간 색인 가져오기: (왼쪽 - 오른쪽)/2. 모든 왼쪽 및 오른쪽 색인을 변경하고 계산할 수 있도록 중간 색인이 반복 내부에 있는지 확인합니다.
  • 반환 및 종료 검색이면 중간 요소가 대상과 같은지 확인하십시오.
  • 중간 요소가 목표보다 작으면 목록의 오른쪽을 검색합니다. 왼쪽 인덱스를 가운데 + 1로 설정합니다.
  • 중간 요소가 목표보다 큰 경우 목록의 왼쪽을 검색합니다. 올바른 색인을 중간에 설정하십시오 - 1.
  • 일치 항목이 발견되거나 왼쪽 인덱스가 오른쪽 인덱스보다 클 때까지 반복합니다.

  • 두 가지 유형의 접근 방식: 재귀 및 반복

    재귀적 접근:

    class Solution {
        public int search(int[] nums, int target) {
            int left = 0;
            int right = nums.length -1;
    
            return binarySearch(nums, target, left, right);
    
        }
    
        public int binarySearch(int[] nums, int target, int left, int right){
            int middle = (right + left) / 2;
    
            if(right < left){ 
                return -1;
            }
    
            if(target == nums[middle]){ 
                return middle;
            }
    
            if(target < nums[middle]){
                return binarySearch(nums, target, left, middle - 1);
            } else {
                return binarySearch(nums, target, middle + 1, right);
            }
        }
    }
    


    반복적 접근:

    class Solution {
        public int search(int[] nums, int target) {
            int left = 0;
            int right = nums.length -1;
    
            while (right >= left){
                int middle = (right + left) / 2;
                if(target == nums[middle]){ 
                    return middle;
                }
                if(target < nums[middle]){
                    right = middle - 1;
                } else {
                    left = middle + 1;
                }
            }
            return -1; 
        }
    }
    

    좋은 웹페이지 즐겨찾기