Leetcode 33. 搜索旋转排序数组
2018-07-23 12:59
441 查看
class Solution { public: int search(vector<int>& nums, int target) { int beg = 0; int end = nums.size()-1; while(beg <= end) { int mid = beg + (end-beg)/2; //找到就直接返回 if(target == nums[mid]) return mid; else if( target < nums[mid]) { if(nums[beg] < nums[mid])//[beg, mid]是递增区间 [mid+1, end]包含了旋转区间 { if(target >= nums[beg]) // 递增区间 直接用二分就可以了 { end = mid -1; }// 表明可能在后面的旋转区间里面 else { beg = mid +1; } } else if(nums[beg] > nums[mid]) //[beg, mid]是旋转区间 [mid+1, end]包含了递增区间 { end = mid -1; }//前提是 target < nums[mid] 仅当还剩下两个数的时候,就相当于是target < nums[beg] 因此应该 else if(nums[beg] == nums[mid]) { beg = mid+1; } }// else if(target > nums[mid]) { if(nums[beg] < nums[mid])//[beg,mid]是递增区间,[mid+1, end]包含了旋转区间 { beg = mid+1; } else if(nums[beg] > nums[mid])//前面是旋转区间,后面是递增区间, { if(target >= nums[beg])//nums[beg] > nums[end] { end = mid -1; } else { beg = mid +1; } }// 如果仅仅剩下两个元素了,target > nums[mid] else if(nums[beg] == nums[mid]) { beg = mid +1; } } } return -1; } };
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- LeetCode 33 Search in Rotated Sorted Array(在旋转排序数组中搜索)(*)
- LeetCode——旋转排序数组搜索
- *[Lintcode]搜索旋转排序数组
- [Lintcode] Search in Rotated Sorted Array II 搜索旋转排序数组 II
- Java实现-搜索旋转排序数组
- lintcode-搜索旋转排序数组-62
- LeetCode-Find Minimum in Rotated Sorted Array II-旋转排序数组找最小-二分查找
- leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
- Java实现-搜索旋转排序数组2
- 搜索旋转排序数组
- LintCode:M-搜索旋转排序数组
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
- [Leetcode] search in rotated sorted array 搜索旋转有序数组
- [LintCode] 搜索旋转排序数组 Search in Rotated Sorted Array
- [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II
- LintCode : 搜索旋转排序数组
- 搜索旋转排序数组
- LintCode:搜索旋转排序数组