您的位置:首页 > 其它

旋转数组的最小数字

2016-03-18 19:08 253 查看
发现这个程序有几个点特别好:

1、旋转数组意味着如果某部分的序列前面的数小于后面的数则是顺序排列的,则可以直接取前面的数为最小值

while(rotateArray[mid]>=rotateArray[high]) //这个判断可以直接省略中间很多顺序串的比较

2、if(high-low ==1) 配合while判断可以直接省略最后几步判断

3、else if(rotateArray[mid]>=rotateArray[low])

low=mid;

else if(rotateArray[mid]<=rotateArray[high])

high=mid; // 假设中间的是最小的

class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size()==0) return 0;
int low=0,high=rotateArray.size()-1,mid=low;
while(rotateArray[mid]>=rotateArray[high])
{
if(high-low ==1)
return rotateArray[high];
mid=(low+high)/2;
if(rotateArray[low]==rotateArray[mid] && rotateArray[mid]==rotateArray[high])
return inOrder(rotateArray,low,high);
else if(rotateArray[mid]>=rotateArray[low])
low=mid;
else if(rotateArray[mid]<=rotateArray[high])
high=mid;

}
return rotateArray[low];
}
int inOrder(vector<int> str,int low,int high)
{
int min=str[low];
for(int i=low+1;i<=high;i++)
if(min>str[i])min=str[i];
return min;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: