当前位置:网站首页>LeetCode_ Binary search_ Medium_ 153. Find the minimum value in the rotation sort array

LeetCode_ Binary search_ Medium_ 153. Find the minimum value in the rotation sort array

2022-07-07 13:22:00 Old street of small town

1. subject

We know a length of n Array of , In ascending order in advance , Through 1 To n Time After rotation , Get the input array . for example , Original array nums = [0,1,2,4,5,6,7] After the change may get :
If you rotate 4 Time , You can get [4,5,6,7,0,1,2]
If you rotate 7 Time , You can get [0,1,2,4,5,6,7]
Be careful , Array [a[0], a[1], a[2], …, a[n-1]] Rotate once The result is an array [a[n-1], a[0], a[1], a[2], …, a[n-2]] .

Give you an element value Different from each other Array of nums , It turns out to be an ascending array , According to the above situation, we have made many rotations . Please find and return the smallest element in the array .

You have to design a time complexity of O(log n) The algorithm to solve this problem .

Example 1:
Input :nums = [3,4,5,1,2]
Output :1
explain : The original array is [1,2,3,4,5] , rotate 3 Get the input array for the first time .

Example 2:
Input :nums = [4,5,6,7,0,1,2]
Output :0
explain : The original array is [0,1,2,4,5,6,7] , rotate 4 Get the input array for the first time .

Example 3:
Input :nums = [11,13,15,17]
Output :11
explain : The original array is [11,13,15,17] , rotate 4 Get the input array for the first time .

Tips :
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums All integers in are different from each other
nums It turns out to be an ascending array , And carried on 1 to n Second rotation

source : Power button (LeetCode)
link :https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array

2. Ideas

(1) Two point search
Train of thought reference Official solution to this problem .

3. Code implementation (Java)

// Ideas 1———— Two point search 
class Solution {
    
    public static int findMin(int[] nums) {
    
        int left = 0;
        int right = nums.length - 1;
        while (left <= right) {
    
        	// If  nums[left] < nums[right], shows  nums[left...right]  The elements between are in ascending order , So the smallest element is  nums[left]
            if (nums[left] < nums[right]) {
    
                return nums[left];
            }
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums[right]) {
    
                right = mid;
            } else {
    
                left = mid + 1;
            }
        }
        return nums[right];
    }
}
原网站

版权声明
本文为[Old street of small town]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071127056117.html