【LeetCode】Search in Rotated Sorted Array
来源:互联网 发布:淘宝宝贝描述宽度 编辑:程序博客网 时间:2024/06/05 18:42
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.
Discuss
java code : 找到那个 pivot ,然后二分查找, 找pivot的算法复杂度也是 O(logn):
public class Solution { public int search(int[] A, int target) { // Note: The Solution object is instantiated only once and is reused by each test case. if(A == null) return -1; int lhs = 0, rhs = A.length - 1; int pos = 1; int mid = lhs; if(A[lhs] <= A[rhs]) { int index = Arrays.binarySearch(A, target); if(index < 0) return -1; return index; } while(A[lhs] >= A[rhs]) { if(rhs - lhs == 1) { pos = rhs; break; } mid = (lhs + rhs) >> 1; if(A[mid] >= A[lhs]) lhs = mid; else if(A[mid] <= A[rhs]) rhs = mid; } int res1 = binarysearch(A,target,0,pos-1); int res2 = binarysearch(A,target,pos,A.length -1); if(res1 != -1) return res1; if(res2 != -1) return res2; return -1; } public int binarysearch(int[] array, int key, int st, int end){int lhs = st, rhs = end;if(st == end){if(array[st] == key)return st;return -1;}while(lhs <= rhs){int mid = (lhs + rhs) >> 1;if(array[mid] == key)return mid;else if(array[mid] < key)lhs = mid + 1;else rhs = mid - 1;}return -1;}}
Search in Rotated Sorted Array II
Total Accepted: 1164 Total Submissions: 4138My SubmissionsFollow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
java code :
public class Solution { public boolean search(int[] A, int target) { // Note: The Solution object is instantiated only once and is reused by each test case. if(A == null) return false; int lhs = 0, rhs = A.length - 1; int pos = 1; int mid = lhs; if(A[lhs] <= A[rhs]) { Arrays.sort(A); int index = Arrays.binarySearch(A, target); if(index < 0) return false; return true; } while(A[lhs] >= A[rhs]) { if(rhs - lhs == 1) { pos = rhs; break; } mid = (lhs + rhs) >> 1; if(A[mid] == A[lhs] && A[lhs] == A[rhs]) { Arrays.sort(A); int index = Arrays.binarySearch(A, target); if(index < 0) return false; return true; } if(A[mid] >= A[lhs]) lhs = mid; else if(A[mid] <= A[rhs]) rhs = mid; } int res1 = binarysearch(A,target,0,pos-1); int res2 = binarysearch(A,target,pos,A.length -1); if(res1 != -1) return true; if(res2 != -1) return true; return false; } public int binarysearch(int[] array, int key, int st, int end) { int lhs = st, rhs = end; if(st == end) { if(array[st] == key) return st; return -1; } while(lhs <= rhs) { int mid = (lhs + rhs) >> 1; if(array[mid] == key) return mid; else if(array[mid] < key) lhs = mid + 1; else rhs = mid - 1; } return -1; } }
- [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
- 2013 number line of code
- OpenSSl---安装
- 手把手教你如何把java代码,打包成jar文件以及转换为exe可执行文件
- order by 小结
- Spring之openSessionInViewFilter
- 【LeetCode】Search in Rotated Sorted Array
- c语言程序
- JSTL 显示问题
- MyEclipse优化
- WEB开发中HTML页面表单(FORM)域输入合法性的客户端验证
- 年终复盘,我的2010
- VMware安装Ubuntu(附上所遇到问题解决办法)
- Python3 - 时间处理与定时任务
- 项目开发的中的一些经验