在 Python 中搜索旋转排序数组
pythonserver side programmingprogramming更新于 2025/10/25 15:08:17
假设我们有一个按升序排序的数组,并且该数组以您事先不知道的某个枢轴旋转。例如,[0,1,2,4,5,6,7] 可能会变成 [4,5,6,7,0,1,2]。我们为搜索指定了一个目标值。如果我们可以在数组中找到它,则返回其索引,否则返回 -1。我们可以假设数组中不存在重复项。因此,如果数组类似于 [4,5,6,7,0,1,2],则输出将为 4。因为此元素的索引位于索引 4 处。
为了解决这个问题,我们将遵循以下步骤 −
- low := 0 和 high := 数组长度
- while low < high
- 查找 mid 为 mid := low + (high - low)/2
- 如果 arr[mid] = target,则返回 mid
- 如果 arr[low] <= arr[mid]
- 如果 target >= arr[low] 且 target < arr[mid],则 high := mid,否则 low := mid + 1
- 否则
- 如果 target <= arr[high - 1] 且 target > arr[mid],则 low := mid + 1,否则 high := mid
- 返回 -1
示例 (Python)
让我们看看下面的实现以便更好地理解 −
class Solution(object): def search(self, nums, target): low = 0 high = len(nums) while low<high: mid = low + (high-low)//2 if nums[mid] == target: return mid if nums[low]<=nums[mid]: if target >=nums[low] and target <nums[mid]: high = mid else: low = mid+1 else: if target<=nums[high-1] and target>nums[mid]: low = mid+1 else: high = mid return -1 ob1 = Solution() print(ob1.search([4,5,6,7,8,0,1,2], 0))
输入
[4,5,6,7,0,1,2] 0
输出
5
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

