多设置了一个ans变量,每次找到一个等于val的值,我就用它的序号覆盖ans,这样,由于我们的寻找方向是正确的,因此最后ans记录的序号,肯定就是我们需要的答案,同时,如果不存在,则ans已经初始为-1,因此,最后直接返回ans即可。看下面5个例子。

第一,求任意一个i使得num[i]等于val,不存在返回-1;

View Code
int BinarySearch(int low, int high, int val)
{
int ans = -1;
while(low <= high){
int mid = (low + high) / 2;
if(num[mid] <= val){
low = mid + 1;
if(num[mid] == val){
ans = mid;
break;
}
}
else{
high = mid - 1;
}
}
return ans;
}

第二,求最大的i使得num[i]等于val,不存在返回-1;

View Code
int BinarySearch(int low, int high, int val)
{
int ans = -1;
while(low <= high){
int mid = (low + high) / 2;
if(num[mid] <= val){
low = mid + 1;
if(num[mid] == val){
ans = mid;
}
}
else{
high = mid - 1;
}
}
return ans;
}

第三,求最小的i使得num[i]等于val,不存在返回-1;

View Code
int BinarySearch(int low, int high, int val)
{
int ans = -1;
while(low <= high){
int mid = (low + high) / 2;
if(num[mid] < val){
low = mid + 1;
}
else{
high = mid - 1;
if(num[mid] == val){
ans = mid;
}
}
}
return ans;
}

第四,求最大的i使得array[i]小于val,不存在返回-1;

View Code
int BinarySearch(int low, int high, int val)
{
int ans = -1;
while(low <= high){
int mid = (low + high) / 2;
if(num[mid] < val){
low = mid + 1;
ans = mid;
}
else{
high = mid - 1;
}
}
return ans;
}

第五,求最小的i使得array[i]大于val,不存在返回-1

View Code
int BinarySearch(int low, int high, int val)
{
int ans = -1;
while(low <= high){
int mid = (low + high) / 2;
if(num[mid] <= val){
low = mid + 1;
}
else{
high = mid - 1;
ans = mid;
}
}
return ans;
}

相关文章:

  • 2022-01-10
  • 2021-12-27
  • 2021-08-12
  • 2022-03-05
  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2021-09-24
  • 2021-10-28
相关资源
相似解决方案