題目: 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.
題目翻譯:
假設一個有序數組在一個未知的位置旋轉。
(即0 1 2 4 5 6 7可能變成4 5 6 7 0 1 2)。
給定一個目標值進行搜尋。如果數組中存在則返回它的索引,否則返回-1。
可以假設數組中不存在重複的元素。
分析:
類似二分尋找,但判斷處於哪個子區間要複雜一些。
C++實現:
class Solution {public: int search(int A[], int n, int target) { int left = 0; int right = n - 1; while(left <= right) { int mid = (left + right) / 2; if(A[mid] == target) { return mid; } if(A[mid] >= A[left]) { if(A[mid] > target && A[left] <= target){right = mid - 1;}else{left = mid + 1;} } else { if(A[mid] < target && A[right] >= target) { left = mid + 1; } else { right = mid - 1; } } } return -1; }}; Java實現:
public class Solution { public int search(int[] A, int target) {int left = 0;int right = A.length - 1;while (left <= right) {int mid = (left + right) / 2;if (A[mid] == target) {return mid;}if (A[mid] >= A[left]) { if (A[mid] > target && A[left] <= target) {right = mid - 1;} else {left = mid + 1;}} else {if (A[mid] < target && A[right] >= target) {left = mid + 1;} else {right = mid - 1;}}}return -1; }} Python實現:
class Solution: # @param A, a list of integers # @param target, an integer to be searched # @return an integer def search(self, A, target): left = 0 right = len(A) - 1 while left <= right: mid = (left + right) / 2 if A[mid] == target: return mid if A[mid] >= A[left]: if A[mid] > target and A[left] <= target: right = mid - 1 else: left = mid + 1 else: if A[mid] < target and A[right] >= target: left = mid + 1 else: right = mid - 1 return -1
感謝閱讀,歡迎評論。