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