33. Search in Rotated Sorted Array
来源:互联网 发布:王自如 罗永浩 知乎 编辑:程序博客网 时间:2024/05/17 02:19
problem:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might 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.
这道题如果顺序查找,就没啥意思了。下面分析一下二分查找法的使用。
首先找到pivot的位置,pivot指的是顺序序列中的最大值,可以观察得到,若用二分法查找,比较中间mid位置与队首pre位置的值比较,若大于队首,说明pivot在mid与target之间,修改pre的位置;若小于pre上的值,说明pivot在pre与mid之间,修改post的值。
找到pivot的位置之后,比较target与pre的值,若小于pre,则target在pivot到post之间,若大于pre,说明在pre与pivot中间。
对对应情况进行二分查找即可。
class Solution {private: int FindPivot(vector<int> nums) { int result = -1; int mid = -1; int length = nums.size(); int pre = 0; int post = length - 1; //序列有序 if(nums[length-1] > nums[0]) result = -1; else { //序列无序,二分查找旋转点 while(pre<=post) { mid = (pre + post) / 2; //若pivot在mid后面 if(nums[mid] > nums[pre]) pre = mid; else if(nums[mid] < nums[pre]) post = mid; else { result = mid; break; } } } return result; } //二分法 int binaryfind(int pre, int post, int target, vector<int> nums) { int result = -1; while(pre<=post) { int mid = (pre + post) / 2; if(nums[mid] > target) post = mid - 1; else if(nums[mid] < target) pre = mid + 1; else { result = mid; break; } } return result; }public: int search(vector<int>& nums, int target) { int result; int pivot; int length = nums.size(); //寻找转折点 pivot = FindPivot(nums); if(pivot == -1) result = binaryfind(0, length-1, target, nums); else if(nums[0] > target) result = binaryfind(pivot+1, length-1, target, nums); else result = binaryfind(0, pivot, target, nums); return result; }};
0 0
- [LeetCode]33.Search in Rotated Sorted Array
- LeetCode --- 33. Search in Rotated Sorted Array
- LeetCode 33.Search in Rotated Sorted Array
- [Leetcode] 33. Search in Rotated Sorted Array
- 33.Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- Leetcode-33.Search in Rotated Sorted Array.
- [leetcode] 33. Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- latex安装sty文件
- orb-slam中的orb项目源码解析
- cpu cmpxchg 指令理解 (CAS)
- mysql学习的方方面面
- Xamarin.ios 使用webview加载gif图片
- 33. Search in Rotated Sorted Array
- pug--HTML模板引擎安装编译
- method to solve the problem : Could not cast value of type 'NSManagedObject_ to
- github readme添加图片
- 有些类也需要计划生育--单例模式
- Step
- 【Android】Android五种数据传递方法汇总
- 2016年11月30日 angularJS input=file 绑定change事件
- 进程同步的经典问题1——读者写者问题(写者优先与公平竞争)