LeetCode 33. Search in Rotated Sorted Array

 

 

这道题目很经典,本人表示在面试时遇见过,要求复杂度为O(logn),很显然必须用二分查找,但是旋转导致数组并非从左到右都是有序的,因此我们在查找时需要做判断,我们找打的终点左边或者右边至少一边是有序的;如果中间数小于最右边的数字,则右半段是有序的;如果中间数字大于最右边数字,则左半段是有序的,参考下图:

 

 

代码如下:

 

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

 

反思:一刷本来可以AC,结果犯了一个傻逼的错误,把“return -1”这条语句放在了while循环的里面,简直蠢透了,技术的魅力可能就在于它的严谨吧。

 

部分图片和思考来自于:

https://www.cnblogs.com/grandyang/p/4325648.html

https://www.cnblogs.com/cling-cling/p/4875961.html

 

posted @ 2018-11-03 22:10  皇家大鹏鹏  阅读(197)  评论(0编辑  收藏  举报