1 条题解

  • 0
    @ 2026-1-28 15:37:03
    #include <bits/stdc++.h>
    using namespace std;
    
    // 全局数组:存储有序递增的数组,大小满足n≤1e6的要求
    int arr[1000010];
    
    // [1] 非递归二分查找函数:在数组arr[0..b-1]中查找值a的1-based位置
    // 找到则返回位置,否则返回-1
    int f(int a, int b){
        int l = 0, r = b - 1; // 二分边界:闭区间 [l, r]
        while(l <= r){
            // 计算中间位置,用l+(r-l)/2避免(l+r)溢出
            int mid = l + (r - l) / 2;
            if(a < arr[mid]){
                r = mid - 1; // 目标值在左半区间,缩小右边界
            }else if(a > arr[mid]){
                l = mid + 1; // 目标值在右半区间,缩小左边界
            }else{
                return mid + 1; // 找到目标值,转换为1-based位置返回
            }
        }
        return -1; // 遍历完区间未找到,返回-1
    }
    
    int main(){
        int n, x; // [2] n:数组元素个数;x:待查找的数值
        cin >> n;
        
        // [3] 输入有序递增的数组
        for(int i = 0; i < n; i++)
            cin >> arr[i];
        
        cin >> x;
        
        // [4] 调用二分查找函数并输出结果
        cout << f(x, n);
        
        return 0;
    }
    
    • 1

    信息

    ID
    1214
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者