面試題 10.03. 搜尋旋轉陣列
阿新 • • 發佈:2022-01-16
搜尋旋轉陣列。給定一個排序後的陣列,包含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; } }