二分——二分查詢(存在重複元素)
阿新 • • 發佈:2021-02-11
技術標籤:機試準備
#include<stdio.h>
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;
}
int main()
{
const int n = 5;
int A[n] = {1, 3, 3, 3, 6};
printf("%d %d", lower_bound(A, 0, 4, 3), upper_bound(A, 0 , 4, 3));
return 0;
}