public int minNumberInRotateArray (List<int> rotateArray) {
int low = 0;
int hight = rotateArray.Count-1;
int mid = 0;
if(rotateArray[low] < rotateArray[hight])return rotateArray[low];
while(low<hight)
{
mid = (hight+low)/2; //每次算一次中点
//中间数>右边数,答案区间[mid+1,hight]
if(rotateArray[mid]>rotateArray[hight])
{
low = mid+1;
}
//中间数<右边数,答案区间[low,mid]
if(rotateArray[mid]<rotateArray[hight])
{
hight = mid;
}
//除上面之外的情况,左右都可能有最小数
if(rotateArray[mid]==rotateArray[hight])
{
//直接比较low跟hight哪个大,大的舍弃,小的留下
//一样的话去掉low跟hight都行(我选择的是去掉low,即让low++)
switch(rotateArray[low]>=rotateArray[hight])
{
case true:
low++;
break;
case false:
hight--;
break;
}
}
}
return rotateArray[hight];
}
int low = 0;
int hight = rotateArray.Count-1;
int mid = 0;
if(rotateArray[low] < rotateArray[hight])return rotateArray[low];
while(low<hight)
{
mid = (hight+low)/2; //每次算一次中点
//中间数>右边数,答案区间[mid+1,hight]
if(rotateArray[mid]>rotateArray[hight])
{
low = mid+1;
}
//中间数<右边数,答案区间[low,mid]
if(rotateArray[mid]<rotateArray[hight])
{
hight = mid;
}
//除上面之外的情况,左右都可能有最小数
if(rotateArray[mid]==rotateArray[hight])
{
//直接比较low跟hight哪个大,大的舍弃,小的留下
//一样的话去掉low跟hight都行(我选择的是去掉low,即让low++)
switch(rotateArray[low]>=rotateArray[hight])
{
case true:
low++;
break;
case false:
hight--;
break;
}
}
}
return rotateArray[hight];
}