为什么right = mid - 1不可以
查看原帖
为什么right = mid - 1不可以
59205
cleverSheep楼主2021/11/12 13:10
#include <bits/stdc++.h>
#define N 1000020
using namespace std;
int a[N+1];
int main(){
    int n = 0,m = 0;
    bool flag = false;
    int target = 0;
    cin >> n >> m;
    for(int i = 0;i < n;i++){
        cin >> a[i];
    }
    for(int i = 0;i < m;i++){
        cin >> target;
        flag = false;
        int left = 0,right = n - 1;
        while(left < right){
            int mid = (right - left) / 2 + left;
            if(a[mid] == target){
                right = mid;
                flag = true;
            }else if(a[mid] > target){
                right = mid;  // 为什么这里只能是right = mid, right = mid - 1为什么不行
            }else{
                left = mid + 1;
            }
        }
        if(!flag){
            cout << -1 << " ";
        }else{
            cout << left + 1 << " ";
        }
    }
    system("pause");
    return 0;
}

如果大了,就往左边搜索,那right = mid - 1为什么不可以嘞

2021/11/12 13:10
加载中...