原创实现STL:lower_bound与upper_bound函数
lower_bound函数:返回第一个等于x的位置,若没有,返回-1。upper_bound函数:返回第一个大于x的位置,若没有,返回-1。#include<iostream>using namespace std;int lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置{int mid, ans;while (
·
lower_bound函数:返回第一个等于x的位置,若没有,返回-1。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid, ans = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (A[mid] >= x)
right = (ans = mid) - 1;
else
left = mid + 1;
}
if (A[ans] == x)
return ans;
else
return -1;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid, ans = 0;
int Asize = right;
while (left < right)
{
mid = left + (right - left) / 2;
if (A[mid] > x)
right = (ans = mid);
else
left = mid + 1;
}
if (A[ans] > x)
return ans;
else
return Asize;
}
算法笔记写法
lower_bound函数:返回第一个等于x的位置,若没有,返回N。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] >= x)
right = mid;
else
left = mid + 1;
}
return left;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] > x)
right = mid;
else
left = mid + 1;
}
return left;
}
更多推荐
所有评论(0)