Loading

33-搜索旋转排序数组

具体思路参考链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/solution/yi-wen-jie-jue-4-dao-sou-suo-xuan-zhuan-pai-xu-s-2/

code-33:

题中给明O(nlogn)的复杂度,第一个想的就是二分查找的方法,但是旋转数组是递增递减或者递减递增的,无法直接二分查找判断状况。所以判断的时候要根据具体的递增 递减情况去分区然后进行比较

 1 class Solution {
 2 public:
 3     int search(vector<int>& nums, int target) {
 4         int len=nums.size();
 5         if(len==0)
 6         {
 7             return -1;
 8         }
 9         int left=0;
10         int right=len-1;
11         while(left<=right)
12         {
13             int mid=(left+right)/2;
14             if(nums[mid]==target)
15             {
16                 return mid;
17             }
18             if(nums[left]<=nums[mid])
19             {
20                 if(nums[left]<=target&&target<=nums[mid])
21                 {
22                     right=mid-1;
23                 }
24                 else
25                 {
26                     left=mid+1;
27                 }
28             }
29             else
30             {
31                 if(nums[mid]<=target&&target<=nums[right])
32                 {
33                     left=mid+1;
34                 }
35                 else{
36                     right=mid-1;
37                 }
38             }
39 
40         }
41         return -1;
42 
43     }
44 };
View Code

 code-153:

跟33类似,确定递增的数组区域,[left,mid] or [mid,right] 递增的话left(mid)对应的元素就是当前递增数组的最小值,存入最小值变量res中,然后对剩下那一块非递增区域在一次进行判断,直到left=right判断

 1 class Solution {
 2 public:
 3     int findMin(vector<int>& nums) {
 4         int len=nums.size();
 5         int left=0;
 6         int right=len-1;
 7         int res=INT_MAX;
 8         while(left<=right)
 9         {
10             int mid=(left+right)/2;
11             if(nums[left]<=nums[mid])
12             {
13                 if(res>nums[left])
14                 {
15                     res=nums[left];
16                 } 
17                 left=mid+1;
18             }
19             else
20             {
21                 if(res>nums[mid])
22                 {
23                     res=nums[mid];
24                 } 
25                 right=mid-1;
26             }
27         }
28         return res;
29 
30 
31     }
32 };
View Code

 

posted @ 2020-03-09 22:25  是凉城吖  阅读(140)  评论(0编辑  收藏  举报