LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
2016-01-06 19:01
344 查看
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
相当于将数组的后面一部折叠到数组的前面去了,本质上也是二分法,这里其实也是有规律可循的:首先要得到转折点,也就是其左边右边都比其大的那一点。给一个start以及一个end,如果nums[mid] > nums[start],那么说明从start到mid也一定是递增的,很容的知道pivot一定在mid+1到end之间,那么递归的去查找就可以了。nums[mid] < nums[start]可以同样的去分析,代码如下所示:
(i.e.,
0 1 2 4 5 6 7might become
4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
相当于将数组的后面一部折叠到数组的前面去了,本质上也是二分法,这里其实也是有规律可循的:首先要得到转折点,也就是其左边右边都比其大的那一点。给一个start以及一个end,如果nums[mid] > nums[start],那么说明从start到mid也一定是递增的,很容的知道pivot一定在mid+1到end之间,那么递归的去查找就可以了。nums[mid] < nums[start]可以同样的去分析,代码如下所示:
class Solution { public: int search(vector<int>& nums, int target) { int pivot = getPivot(nums, 0, nums.size() - 1); int pos = bSearch(nums, 0, pivot - 1, target); if(pos != -1) return pos; return bSearch(nums, pivot, nums.size() - 1, target); } int getPivot(vector<int>&nums, int start, int end){ if(start > end) return -1; int mid = start + (end - start)/2; if(nums[start] <= nums[mid]){ int pos = getPivot(nums, mid + 1, end); if(pos == -1) return start; else if(nums[pos] < nums[start]) return pos; else return start; }else{ int pos = getPivot(nums, start, mid); if(pos == -1) return mid; if(nums[pos] < nums[end]) return pos; else return mid; } } int bSearch(vector<int>&nums, int start, int end, int target){ int mid; while(start <= end){ mid = (start+end)/2; if(nums[mid] > target){ end = mid - 1; }else if(nums[mid] < target){ start = mid + 1; }else{ return mid; } } return -1; //返回-1,表明在这一部分没有找到,可以在下一部分查找 } };
相关文章推荐
- DrawerLayout的使用
- 正确认识使用UML中的类图——辨析类图的两种存在形式
- Java基础之枚举妙用
- Java基础之枚举妙用
- Java基础之枚举妙用
- Java基础之枚举妙用
- sencha touch编译报错:“bfailed to create task or type x-compass-compile Cause: The name is undefined”
- 深入理解CSS3 Animation 帧动画(step详解)
- 字符串处理-${#},expr length,expr index,expr match,抽取子串
- jpgraph中文使用手册之文本和字体控制教程
- Spring MVC @ResponseBody 中文乱码解决
- Spring环境下MyBatis支持多个Datasource参考实现
- 快速幂
- 自己 用到的 spring注解
- ios发布app遇到的问题
- Matlab install on ubuntu
- super关键字
- BZOJ1934Vote 善意的投票
- super关键字
- 字体大小