实现lower_bound和upper_bound算法

来源:互联网 发布:花椒直播网络不佳 编辑:程序博客网 时间:2024/05/22 12:39
    lower_bound算法返回第一个大于等于给定值所在的位置。设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置。当start和last指向相同位置时循环结束。mid指向[start,last)区间的中间位置,当中间位置元素值大于等于给定val时,说明第一个大于等于val值在mid位置的左边,更新last为mid。当中间位置元素值小于给定的val时,说明第一个大于等于val值在mid右边,不包括mid所在的位置。更新start为mid+1。
int myLowerBound(vector<int> &data, int k){int start = 0;int last = data.size();while (start < last){int mid = (start + last) / 2;if (data[mid] >= k){last = mid;}else{start = mid + 1;}}return start;}
    upper_bound算法返回第一个大于给定元素值所在的位置,设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置,当start和last指向相同位置时循环结束,mid指向[start,last)区间的中间位置,当中间位置元素值小于等于给定val时,说明第一个大于val值在mid位置的右边更新start为mid+1。当中间位置元素值大于给定元素时,说明第一大于在mid左边,包括mid所在位置,所以更新last为mid。
int myUpperBound(vector<int> &data, int k){int start = 0;int last = data.size();while (start < last){int mid = (start + last) / 2;if (data[mid] <= k){start = mid + 1;}else{last = mid;}}return start;}


0 0
原创粉丝点击