1. 程式人生 > 其它 >面試題 10.03. 搜尋旋轉陣列

面試題 10.03. 搜尋旋轉陣列

搜尋旋轉陣列。給定一個排序後的陣列,包含n個整數,但這個陣列已被旋轉過很多次了,次數不詳。請編寫程式碼找出陣列中的某個元素,假設陣列元素原先是按升序排列的。若有多個相同元素,返回索引值最小的一個。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/search-rotate-array-lcci
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {
    public int search(int[] arr, int target) {
        int left = 0, right = arr.length - 1;
        int ans = -1;
        while (left <= right) {
            int mid = (left + right) >> 1;
            if (arr[left] == target) {
                return left;
            }
            if (arr[mid] == target) {
                ans = mid;
                right = mid - 1;
            } else {
                if (arr[left] == arr[right] && arr[left] == arr[mid]) {
                    left++;
                    right--;
                } else {
                    if (arr[left] <= arr[mid]) {
                        if (target >= arr[left] && target <= arr[mid]) {
                            right = mid - 1;
                        } else {
                            left = mid + 1;
                        }
                    } else {
                        if (target >= arr[mid] && target <= arr[right]) {
                            left = mid + 1;
                        } else {
                            right = mid - 1;
                        }
                    }
                }
            }
        }

        return ans;
    }
}
心之所向,素履以往 生如逆旅,一葦以航