154. 寻找旋转排序数组中的最小值 II Find Minimum in Rotated Sorted Array II

题目 <https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/>

我的判断条件真多

#define min(a,b) ((a)<(b)?(a):(b))

int findMin(int* nums, int numsSize){
    int left,right,mid;
    left=0;right=numsSize-1;
    //printf("%d,%d\n",left,right);
    if(left==right){
        return nums[left];
    }

    if(nums[left] < nums[right]){
        return nums[left];
    }

    mid = left + (right-left)/2;
    
    if(nums[left] == nums[right]){
        if(nums[mid] > nums[left]){
            return findMin(nums+mid+1,numsSize-mid-1);
        }else if(nums[mid] < nums[right]){
            return findMin(nums,mid+1);
        }else{
            int n1,n2;
            if(mid != 0)
                n1 = findMin(nums,mid);
            else
                n1 = nums[mid];
            
            if(numsSize-mid-1!=0)
                n2 = findMin(nums+mid+1,numsSize-mid-1);
            else
                n2 = nums[mid];
            
            return min(n1,n2);
        }
    }
    else //if(nums[left] > nums[right])
    {
        if(nums[mid] >= nums[left]){
            return findMin(nums+mid+1,numsSize-mid-1);
        }else //if(nums[mid] < nums[right])
        {
            return findMin(nums,mid+1);
        }
    }
    
}

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/112170479