Binary Search 中的 lower bound & upper bound
前言
c++ 的 STL 有提供兩個跟 binary seach 有關的 function: lower_bound 和 upper_bound, 每次在寫 leetcode 相關的題目時都會一直忘記這兩個 function 的定義,故決定紀錄一下兩者的定義及用法
Include STL
lower_bound 和 upper_bound 被定義在 <algorithm> 裡面
Lower Bound
找出數列中第一個 大於或等於 target 的位置, 換句話說就是找到 >= target 的最小值的位置
// vector<int> v;
// assume v is a sorted array
auto it = lower_bound(v.begin(), v.end(), target);
int idx = it - v.begin();
Upper Bound
找出數列中第一個 大於 target 的位置, 換句話說就是找到 > target 的最小值的位置
// vector<int> v;
// assume v is a sorted array
auto it = upper_bound(v.begin(), v.end(), target) - v.begin();
int idx = it - v.begin();
lower_bound 和 upper_bound 都會回傳 對應型態的 iterator, 如果傳入的 sequence 找不到目標值,就會回傳 v.end()