Leetcode_search-in-rotated-sorted-array
来源:互联网 发布:mac 怎么设置无线鼠标 编辑:程序博客网 时间:2024/05/01 01:25
http://oj.leetcode.com/problems/search-in-rotated-sorted-array/
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,那么就是两个有序的序列。判断target在哪一块,再做二分查找。
参考代码:
class Solution {public: int bs(int A[], int left, int right, int target) { if(left>right) return -1; int mid = (left+right)/2; if(A[mid]<target) { left=mid+1; return bs(A, left, right, target); } else if(A[mid]>target) { right = mid-1; return bs(A, left, right, target); } return mid; } int search(int A[], int n, int target) { int i = 0; while(i+1<n && A[i]<A[i+1]) { ++i; } if(A[0]<=target && i< n && target<=A[i]) { return bs(A, 0, i, target); } else if(i+1 < n && A[i+1]<=target && target<=A[n-1]) { return bs(A, i+1, n-1, target); } return -1; }};
//SECOND TRIAL, O(logn) time
class Solution {private: int findInRotatedArray(int A[], int left, int right, int target) { if(!A || left > right) return -1; if(left==right) { if(A[left]==target) return left; else return -1; } int mid = (left+right)/2; if(A[left]<A[mid]) { if(A[left]<=target && target<=A[mid]) return findInRotatedArray(A, left, mid, target); else return findInRotatedArray(A, mid+1, right, target); } else if(A[left]>A[mid]) { if(target>=A[mid] && target<=A[right]) return findInRotatedArray(A, mid, right, target); else return findInRotatedArray(A, left, mid-1, target); } else { if(A[mid]==A[right]) return A[left]==target ? left : -1; int ans = findInRotatedArray(A, left, mid, target); if(ans<0) return findInRotatedArray(A, mid+1, right, target); return ans; } }public: int search(int A[], int n, int target) { return findInRotatedArray(A, 0, n-1, target); }};
0 0
- Leetcode_search-in-rotated-sorted-array
- LeetCode_Search in Rotated Sorted Array
- LeetCode_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 II
- Leetcode_search-in-rotated-sorted-array-ii(updated c++ and python version)
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array
- [leetcode]in Rotated Sorted Array
- Search in Rotated Sorted Array
- 奇偶数排序
- 你的完美在我眼中
- android 设置滑动圆点
- findbugs清理总结
- MAC——多路访问协议
- Leetcode_search-in-rotated-sorted-array
- footer 在页面对底部
- Android--Service之AIDL传递复杂对象
- 计算天,时,秒时间的那点事
- 数据挖掘十大算法,你掌握了吗?
- Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(一)
- Pocketsphinx语音识别-----语言模型训练和声学模型的适应过程
- ShadowGun Shaders
- request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会