1 条题解
-
0
#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
- 上传者