#9565. 有序数组中的二分查找

有序数组中的二分查找

Problem: 有序数组中的二分查找

任务总览

任务名称 时间限制 内存限制 分数
二分查找定位 1 sec 1024 MB 5

题目描述

请在一个有序递增的数组中(数组中​不存在相同元素​​),采用​二分查找​,找出值 x 所在的位置。如果 x 在数组中不存在,请输出 -1

注意:位置从 1 开始计数。

输入格式

  • 第一行:一个整数 n (1n106)(1 ≤ n ≤ 10^6),表示数组的长度。
  • 第二行:n递增的整数,表示数组的元素(1a_i1081 ≤ a\_i ≤ 10^8,元素互不相同)。
  • 第三行:一个整数 x (0x108)(0 ≤ x ≤ 10^8),表示要查找的目标值。

输出格式

  • 输出一个整数,表示 x 在数组中的位置(从 1 开始编号),若不存在 x,输出 -1

输入输出示例

输入示例 1

10
1 3 5 7 9 11 13 15 17 19
3

输出示例 1

2

题目解析

  • 由于数组已排序且无重复值,适合使用​二分查找算法​,时间复杂度为 O(logn)O(\log n)
  • 可采用递归或非递归方式实现,分别在左半区或右半区继续查找,直到找到目标值或确定不存在。

数据范围

  • 数组长度 n106n \leq 10^6
  • 每个数组元素为不超过 10810^8 的正整数
  • 查找目标 x 的取值范围为 0x1080 ≤ x ≤ 10^8