티스토리 뷰

Algorithm/Technique

Lower Bound & Upper Bound

기내식은수박바 2021. 10. 2. 16:26
반응형

Lower Bound

찾고자 하는 target 이상의 값이 인덱스 0부터 시작했을 때 등장하는 최초의 위치

 

과정

 

코드

public static int lowerBound(int[] nums, int target) {
    int left = 0, right = nums.length - 1;

    while (left < right) {
        int mid = left + (right - left) / 2;
        
        // 찾으려고 하는 target 값이 현재 nums[mid] 값보다 작거나 같다면
        // nums[mid]는 후보가 될 수 있는 값이다.
        if (target <= nums[mid])
            right = mid;
        else
            left = mid + 1;
    }
    
    return right;
}

 

 

Upper Bound

찾고자 하는 target을 초과하는 (target을 포함하지 않음) 값이 등장하는 최초의 위치

 

과정

 

코드

public int upperBound(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    
    while (left < right) {
        int mid = left + (right - left) / 2;
        
        // Lower Bound와 다른점은 '=' 등호가 빠졌다는 것.
        if (target < nums[mid])
            right = mid;
        else
            left = mid + 1;
    }
    
    return right;
}

 

 

 

결과

 

 

계산 복잡도

Time Complexity : Binary Search를 이용하여 탐색하므로 O(logN)

Space Complexity : O(1)

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함