面试题 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;
    }
}
posted @ 2022-01-16 07:26  Tianyiya  阅读(34)  评论(0)    收藏  举报