【LintCode 題解】小米麪試算法題:搜索旋轉排序數組

題目描述

假設有一個排序的按未知的旋轉軸旋轉的數組(比如,0 1 2 4 5 6 7 可能成爲4 5 6 7 0 1 2)。給定一個目標值進行搜索,如果在數組中找到目標值返回數組中的索引位置,否則返回-1。你可以假設數組中不存在重複的元素。

點擊在線評測代碼

 

樣例

例1:

輸入: [4, 5, 1, 2, 3] and target=1, 
輸出: 2.

例2:

輸入: [4, 5, 1, 2, 3] and target=0, 
輸出: -1.

 

題解

應用二分法分類討論。
注意一下分類的細節即可。

相比自己刷題,有大神帶着刷效果肯定更好,專業的算法課程(點擊免費試聽)可以隨問隨答,在最短時間內提高算法水平,應對大廠面試。

public class Solution {
    public int search(int[] A, int target) {
        if (A == null || A.length == 0) {
            return -1;
        }

        int start = 0;
        int end = A.length - 1;
        int mid;
        
        while (start + 1 < end) {
            mid = start + (end - start) / 2;
            if (A[mid] == target) {
                return mid;
            }
            if (A[start] < A[mid]) {
                // situation 1, red line
                if (A[start] <= target && target <= A[mid]) {
                    end = mid;
                } else {
                    start = mid;
                }
            } else {
                // situation 2, green line
                if (A[mid] <= target && target <= A[end]) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
        } // while
        
        if (A[start] == target) {
            return start;
        }
        if (A[end] == target) {
            return end;
        }
        return -1;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章