* Computer Science/C++

lower_bound / upper_bound

soicem 2021. 5. 30. 16:38
class Solution {
public:
    int binarySearchLowerBound(int left, int right, vector<int> arr, int target){
        // upper bound
        while(left < right){
            int mid = left + (right - left) / 2;
            
            if(arr[mid] <= target){
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }
    
    int binarySearchUpperBound(int left, int right, vector<int> arr, int target){
        // lower bound
        while(left < right){
            int mid = left + (right - left) / 2;
            if(arr[mid] < target){
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }
    
    vector<int> avoidFlood(vector<int>& rains) {
        set<int> ans = {1,2,3,4,5,6,7,8};
        
        auto it = ans.upper_bound(4); // 5
        int v = *it;
        it = ans.lower_bound(4); // 4
        v = *it;
        
        int a = binarySearchLowerBound(0, 7, {1,2,3,4,5,6,7,8}, 4); // 4
        int b = binarySearchUpperBound(0, 7, {1,2,3,4,5,6,7,8}, 4); // 5
        return {};
    }
};

 lower_bound는 target 값이 주어지면 sorted list에서 target보다 같거나 큰 수의 집합에서 가장 작은 값의 iteration을 리턴한다.

 upper_bound는 target 값이 주어지면 sorted list에서 target보다 큰 수의 집합에서 가장 작은 값의 iteration을 리턴한다.

 

 ans.upper_bound(ans.begin(), ans.end(), target); 처럼 sorted list에서 범위를 특정할 수도 있다.

'* Computer Science > C++' 카테고리의 다른 글

2차원 vector rotate  (0) 2020.05.06
상대오차, 백분율차 구하기  (0) 2019.09.16
입력 길이 모를 때 string 공백 별로 입력  (0) 2019.08.23
cin 속도 향상  (0) 2019.08.22
hw13 meeting in pnu data structure class  (0) 2018.12.07