#P4077. 搜索旋转排序数组

搜索旋转排序数组

题目内容

整数数组 numsnums升序排列,数组中的值互不相同

在传递给函数之前,numsnums 在预先未知的某个下标 k(0<=k<nums.length)k(0 <= k < nums.length)上进行了旋转,使数组变为 [nums[k],nums[k+1],...,[nums[k], nums[k+1], ...,nums[n1],nums[0],nums[1],...,nums[k1]]nums[n-1], nums[0], nums[1], ..., nums[k-1]] (下标 从 00 开始 计数)。例如, [0,1,2,4,5,6,7][0,1,2,4,5,6,7]在下标 33 处经旋转后可能变为 [4,5,6,7,0,1,2][4,5,6,7,0,1,2]

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

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

输入描述

  • 第一行输入一个整数 n,表示数组的长度。
  • 第二行输入 n 个整数,表示旋转后的数组 nums
  • 第三行输入一个整数 target,表示需要查找的目标值。

输出描述

  • 输出一个整数,表示目标值 target 在数组中的索引,若不存在则输出 -1

样例

样例 1

输入

7
4 5 6 7 0 1 2
0

输出

样例 2

输入

7
4 5 6 7 0 1 2
3

输出

-1

样例 3

输入

1
1
0

输出

-1

提示:

  • 1<=nums.length<=50001 <= nums.length <= 5000
  • 104<=nums[i]<=104-10^4 <= nums[i] <= 10^4
  • numsnums中的每个值都独一无二
  • 题目数据保证 numsnums 在预先未知的某个下标上进行了旋转
  • 104<=target<=104-10^4 <= target <= 10^4