【剑指 Offer】11. 旋转数组的最小数字

    科技2022-07-12  129

    题目:11. 旋转数组的最小数字

    思路

    初始化两个指针left,right分别指向数组首尾;开始二分搜索,求mid,然后和right位置的数字进行比较; 若 nums[mid] 大于 nums[right],则说明最小值在mid右侧,那么左边界left = mid + 1;若 nums[mid] 小于 nums[right],则说明最小值在mid左侧,那么右边界right = mid;若 nums[mid] 等于 nums[right],那么右边界左移,right --;

    class Solution { public int minArray(int[] numbers) { int left = 0; int right = numbers.length - 1; int mid; while(left < right){ mid = left + (right - left)/2; if(numbers[mid] > numbers[right]){ left = mid + 1; }else if(numbers[mid] > numbers[right]){ right = mid; }else{ right --; } } return numbers[left]; } }
    Processed: 0.015, SQL: 8