[LeetCode] Search in Rotated Sorted Array

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;
    }
}


發佈了65 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章