LeetCode: https://oj.leetcode.com/problems/search-in-rotated-sorted-array/
該問題要在一個旋轉的排序數組裏面尋找目標值,對於排好序的數組的查找問題,一般會想到二分法,而該問題屬於分段有序,所以也可以採用二分查找的方法;關鍵在於如何對數組的分類進行考慮;很顯然,對於二分後子數組,有兩種情況:1. 完全遞增 2. 分層兩段遞增數組;第一種情況很好考慮,第二種情況要對他再進行二分,又要考慮兩種情況:1. 二分點在第一段遞增子數組中,還是在第二段遞增子數組中。
代碼如下:
public class Solution {
public int search(int[] A, int target) {
if(A == null || A.length == 0)
return -1;
int l = 0;
int r = A.length-1;
while(l <= r){
int m = (l+r)/2;
if(A[m] == target)
return m;
if(A[l] <= A[r]){
if(A[m] < target){
l = m+1;
}else{
r = m-1;
}
}else{
if(A[m] >= A[l]){
if(target >= A[l] && target < A[m])
r = m-1;
else
l = m+1;
}
else{
if(target >= A[l] || target < A[m])
r = m-1;
else
l = m+1;
}
}
}
return -1;
}
}
LeetCode:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/
對於具有重複元素的數組,當收尾的數據相同時,由於不能確定數組的情況以及數據所在的子數組,所以採用最naive的方法(遍歷):
public class Solution {
public boolean search(int[] a, int target) {
for(int i = 0; i < a.length; i++){
if(a[i] == target)
return true;
}
return false;
}
}