33.Search in Rotated Sorted Array---二分变形

Posted cing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了33.Search in Rotated Sorted Array---二分变形相关的知识,希望对你有一定的参考价值。

题目链接

题目大意:在一个旋转数组中,判断给定的target是否存在于该旋转数组中。

法一:二分。确定中间元素之后,就要判断下一步是遍历左数组还是遍历右数组。如果左数组有序,且target在左数组范围内,则遍历左数组,否则遍历右数组;如果右数组有序,且target在右数组范围内,则遍历右数组,否则遍历左数组。o(lgn)。代码如下(耗时15ms):

技术分享图片
 1     public int search(int[] nums, int target) {
 2         int left = 0, right = nums.length - 1;
 3         while(left <= right) {
 4             int mid = (left + right) / 2;
 5             if(nums[mid] == target) {
 6                 return mid;
 7             }
 8             //如果左半段有序
 9             else if(nums[left] <= nums[mid]) {
10                 //如果target在左半段范围内
11                 if(nums[left] <= target && nums[mid] > target) {
12                     right = mid - 1;
13                 }
14                 //虽然左半段有序,如果target不在左半段范围内,则向右遍历右半段
15                 else {
16                     left = mid + 1;
17                 }
18             }
19             //如果右半段有序
20             else {
21                 //如果target在右半段范围内
22                 if(nums[right] >= target && nums[mid] < target) {
23                     left = mid + 1;
24                 }
25                 //虽然右半段有序,如果target不在右半段范围内,则向左遍历左半段
26                 else {
27                     right = mid - 1;
28                 }
29             } 
30         }
31         return -1;
32     }
View Code

 

以上是关于33.Search in Rotated Sorted Array---二分变形的主要内容,如果未能解决你的问题,请参考以下文章

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array *HARD*

33. Search in Rotated Sorted Array

Leetcode[33]-Search in Rotated Sorted Array

LC.33. Search in Rotated Sorted Array

#Leetcode# 33. Search in Rotated Sorted Array