推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

用二分查找在旋转排序数组中搜索目标值.docx

资料介绍

用二分查找在旋转排序数组中搜索目标值

旋转排序数组的搜索是二分查找的经典变体,它利用"数组部分有序"的特性,在  内定位目标值。本文从问题定义出发,分析求解思路并给出实现。

问题定义

一个原本升序排列的数组在某点旋转,例如 [0,1,2,4,5,6,7] 旋转后变为 [4,5,6,7,0,1,2]。给定这个旋转后的数组与目标值,判断目标值是否存在并返回其下标(若不存在返回 -1)。

旋转数组: [4,5,6,7,0,1,2]
目标值: 0 → 下标4
目标值: 3 → 不存在(-1)

核心观察

旋转数组有一个关键性质:把数组从中点分成两半,其中至少有一半是严格有序的。

因为旋转是在升序数组上进行的,数组中存在一个"断点"(最小值所在位置),断点两侧分别有序。任意中点  分割后,要么左半有序,要么右半有序(或两者皆有序)。

判断哪半有序

设左端点 、中点 、右端点 :

· 若 a[l] <= a[mid],则左半 [l, mid] 有序。

· 否则,右半 [mid, r] 有序。

据此决定目标值应落在哪一半,从而缩小搜索范围。


部分文件列表

文件名 大小
用二分查找在旋转排序数组中搜索目标值.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载