在 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

相关文章


有用资源