33. 搜刮旋转排序数组
标题链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
难度:中等
假设按照升序排序的数组在预先未知的某个点上举行了旋转。
( 比方,数组 [0,1,2,4,5,6,7] 大概变为 [4,5,6,7,0,1,2] )。
搜刮一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的
示例 1:
输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3输出: -1解法一:二分查找法
算法思绪:
望见标题要求算法时间复杂度必须是 O(log n) 级别,那么一定会想到二分查找法。
起首二分查找法,只能在有序的数组内进使用用,怎样在这道题中得到有序的数组呢?
不妨,其着实这数组内里,任意一个节点把数组分成两部门,此中的有一部门一定是有序的,那么我们就用二分查找法中的mid节点举行切分,若那部门是有序的,我们再在有序的部门举行二分查找,直到出现效果。
怎样判定那一部门是有序的?
实在很简单,我们只必要判定nums[0] <= nums[mid],分析前半部门有序,否则后半部门有序。
代码: |