LeetCode Search in Rotated Sorted Array
来源:互联网 发布:淘宝卖家退款多久到账 编辑:程序博客网 时间:2024/06/06 02:17
Suppose an array sorted in ascending order 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,如果没有找到满足target的值,那么在对剩下的升序序列使用二分搜索
代码如下:
class Solution {public: int search(vector<int>& nums, int target) { int len = nums.size(); int front,end,middle; end = len-1;front=0; for(int i=0;i<len-1;i++) { if(target == nums[i]) return i; if(nums[i]>nums[i+1]) { front = i+1; break; } } while(front<=end) { middle = (front+end)/2; if(nums[middle]>target) { end = middle-1; } else if(nums[middle] < target) { front = middle+1; } else { return middle; } } return -1; }};
运行的时候效率不是很稳定
思路二:整个过程都使用二分搜索法
代码如下:
class Solution {public: int search(vector<int>& nums, int target) { int len = nums.size(); int flag = nums[len-1]; int front,end,middle; end = len-1;front=0; while(front<end) { middle = (front+end)/2; if(nums[middle] <= nums[end]) { if(target > nums[middle] && target <= nums[end]) front = middle+1; else end = middle; } else { if(target <= nums[middle] && target >= nums[front]) end = middle; else front = middle+1; } } if(nums[front]==target) return front; return -1; }};
思路三:求出那个pivot的位置,然后就可以将每个middle转换为原先没有rotated的数组中对应的位置
代码如下:
class Solution {public: int search(vector<int>& nums, int target) { int len = nums.size(); int front,end,middle; end = len-1;front=0; while(front<end) { middle = (front+end)/2; if(nums[middle] == target) return middle; if(nums[middle] > nums[end]) front = middle+1; else end = middle; } int smallest = front; front = 0;end = len-1; while(front<=end) { middle = (front+end)/2; int realmiddle = (middle+smallest)%len; if(nums[realmiddle]>target) { end = middle-1; } else if(nums[realmiddle] < target) { front = middle+1; } else { return realmiddle; } } return -1; }};
0 0
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- leetcode 97: Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- Leetcode Search in Rotated Sorted Array
- [LeetCode]Search in Rotated Sorted Array
- 反射
- es6新增属性学习
- Android 手机 tcpdump抓包流程
- asp:Repeater 动态换行
- JavaScript 学习笔记
- LeetCode Search in Rotated Sorted Array
- linux之学习linux系统相关的书籍
- jQuery同步Ajax带来的UI线程阻塞问题及解决方法
- JSP
- 【软件测试】白盒测试方法与黑盒测试方法的区别
- 【译】用maven使java web应用运行在内嵌的Jetty或Tomcat容器中
- SpringMvc解决跨域问题
- 构造函数强制使用new
- MFC单文档程序中,在PreCreateWindow函数中修改窗口大小无而法生效的解决办法