153. Find Minimum in Rotated Sorted Array

典型二分查找

[1 2 3 4 5 6 7] mid < left 在[left,mid]
[4 5 6 7 1 2 3 ] mid > left 在[mid, right]
[5 6 7 1 2 3 4] mid < left 在[left,mid]

while(start+1 < end) 退出时候有两种情况:
一种是start+1 == end ,取nums[start],nums[end]最小值,这种情况数组的长度是偶数。
还有一种是start+1 > end,也就是start == end,这种情况数组的长度是奇数,去任意一个返回即可

    if(start == end)
        return nums[start];
    if(nums[start] < nums[end])
        return nums[start];
    else
        return nums[end];

精简下就是

    if(nums[start] < nums[end])
        return nums[start];

        return nums[end];

int findMin(int* nums, int numsSize) {
    int start = 0;
    int end = numsSize - 1;
    int mid;
    
    while(start+1 < end){
        mid = start + (end - start)/2;
        
        if(nums[mid] < nums[end])
            end = mid;
        else
            start = mid;
        
    }

    if(nums[start] < nums[end])
        return nums[start];
 
    return nums[end];

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容