Leetcode -- Find Minimum in Rotated Sorted Array

题目描述:


Suppose a sorted array is rotated at some pivot unknown to you beforehand.


(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).


Find the minimum element.


You may assume no duplicate exists in the array.


思路:二分法查找。
1. 如果中间值(nums[m]) < 最左边值(nums[l]),最小值在左半部分,即r = m
2. 如果nums[m] > nums[l],如果此时nums[r] > nums[m],即nums[r]>nums[m]>nums[l],说明nums[l]就是最小值。否则,最小值在右半部分,即l=m。
3. 循环条件为l < r-1,如果最后没有找到,需要比较nums[l]和nums[r]的大小




实现代码:



public class Solution {
    public int FindMin(int[] nums) {
        var l = 0;
    	var r = nums.Length - 1;
    	
    	while(l < r - 1){
    		var m = (l + r) / 2;
    		if(nums[m] < nums[l]){
    			r = m;
    		}
    		else if(nums[m] > nums[l]){
    			if(nums[r] > nums[m]){
    				return nums[l];
    			}
    			l = m;
    		}
    	}
    	
    	return Math.Min(nums[l], nums[r]);
    }
}


你可能感兴趣的:(Leetcode -- Find Minimum in Rotated Sorted Array)