1. 程式人生 > 其它 >154. 尋找旋轉排序陣列中的最小值 II Find Minimum in Rotated Sorted Array II

154. 尋找旋轉排序陣列中的最小值 II Find Minimum in Rotated Sorted Array II

技術標籤:LeetCode

題目 <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);
        }
    }
    
}