当前为游客只读模式。登录后可提交代码判题并保存草稿与进度。

搜索旋转排序数组

中等search()
时间限制 2000 ms内存限制 128 MB复杂度要求 时间 O(log n),空间 O(1)

搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值互不相同。

在传递给函数之前,nums 在预先未知的某个下标 k(0 ≤ k < nums.length)上进行了旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]。

例如 [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。

给你旋转后的数组 nums 和一个整数 target,如果 nums 中存在这个目标值,则返回它的下标,否则返回 -1。

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

约定

  • 数组中所有值互不相同。
  • 下标从 0 开始。

输入

  • nums:旋转后的升序数组,1 ≤ nums.length ≤ 5000
  • target:目标整数

输出

目标值的下标;不存在返回 -1。

示例一

输入:

nums = [4,5,6,7,0,1,2], target = 0

输出:

4

示例二

输入:

nums = [4,5,6,7,0,1,2], target = 3

输出:

-1

示例三

输入:

nums = [1], target = 0

输出:

-1

复杂度要求

  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)
Loading...

输入

[[4,5,6,7,0,1,2],0]

预期输出

4
自定义用例