【二分】Search in Rotated Sorted Array
来源:互联网 发布:编程会让电脑死机么 编辑:程序博客网 时间:2024/06/06 00:33
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.
方法一:先找出旋转数组的最小节点,再进行分段二分查找public class Solution { public int findPivot(int [] a){//找出旋转数组的最小值下标 int l = 0; int r = a.length-1; int pivot = l; while(l<r && a[l] >= a[r]){//注意条件 if(r - l == 1){ pivot = r; break; } int mid = (l+r)/2; if(a[mid] <= a[l]) r = mid;//和二分查找的变化有区别 else l = mid; } return pivot; } public int binaySearch(int [] a, int target, int l, int r){//真二分查找 while(l <= r){ int mid = (l+r)/2; if(a[mid] < target) l = mid+1; else if(a[mid] > target) r = mid-1; else return mid; } return -1; } public int search(int[] A, int target) { if(A.length == 0) return -1; int pivot = findPivot(A); //System.out.println(pivot); int res1 = binaySearch(A, target, 0, pivot-1); if(res1 != -1) return res1; else return binaySearch(A, target, pivot, A.length-1); }}方法二:递归查找
public int search(int[] A, int target) { return find(A, 0, A.length - 1, target);}private int find(int[] arr, int p, int q, int x) { if (p > q) return -1; int mid = (p + q) / 2; if (arr[mid] == x) return mid; if (arr[p] < arr[mid]) { // left is ordered, right is broken if (arr[p] <= x && x <= arr[mid]) // x is in the left ordered part return find(arr, p, mid - 1, x); else // x doesn't belong to left ordered part return find(arr, mid + 1, q, x); } else if (arr[p] > arr[mid]) {// left is broken, so right is ordered if (arr[mid] <= x && x <= arr[q]) return find(arr, mid + 1, q, x); else return find(arr, p, mid - 1, x); } else { // a[p] == a[mid], directly search right return find(arr, mid + 1, q, x); }}
0 0
- 【二分】Search in Rotated Sorted Array
- 【二分】Search in Rotated Sorted Array II
- leetcode 二分查找 Search in Rotated Sorted Array
- leetcode-二分搜索:Search in Rotated Sorted Array
- Search in Rotated Sorted Array 倒置数组中的二分查找
- 二分查找——Search in Rotated Sorted Array
- LeetCode 33 Search in Rotated Sorted Array (二分查找 推荐)
- LeetCode 81 Search in Rotated Sorted Array II (二分)
- leetcode 33. Search in Rotated Sorted Array(二分查找)
- [LeetCode 33]Search in Rotated Sorted Array (二分查找)
- Leetcode 33 - Search in Rotated Sorted Array(二分)
- Leetcode 81 - Search in Rotated Sorted Array II(二分)
- LeetCoder 33. Search in Rotated Sorted Array(二分)
- leetcode 33. Search in Rotated Sorted Array 二分查找
- leetcode 81. Search in Rotated Sorted Array II 二分查找
- leetcode 33. Search in Rotated Sorted Array (复杂二分查找)
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- 非阻塞IO 和阻塞IO
- 仿新浪微博2014之主界面二(自定义标题栏)
- leetcode系列(3)Spiral Matrix II
- linux网络编程十六:I/O复用的应用-poll简单实现聊天室程序
- 第一篇博客
- 【二分】Search in Rotated Sorted Array
- poj1703
- 一般物体检测--Binarized Normed Gradients for Objectness Estimation at 300fps
- 黑马程序员 新建Web网站与新建Web应用程序的区别
- HDOJ 1686 Oulipo
- 2014蓝桥杯B组初赛试题《李白打酒》
- 《黑马程序员》 累加思想与计数器思想
- 身份证最后一位校验位c语言生成代码
- jquery.ui.datepicker 添加时分秒