旋转数组的最小数字
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; // 假设中间的是最小的
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; } };
相关文章推荐
- 三、插入排序
- 三、插入排序
- QQ空间、新浪微博、腾讯微博、豆瓣等一键分享API链接代码
- bzoj1018 堵塞的交通traffic
- 【并查集】破译密文
- HDU 1232 畅通工程 (并查集)
- objectc -c 之 property 与synthesize小记 (2)
- cc.ScrollView的坑
- 蓝桥杯-兰顿蚂蚁---有关逻辑错误
- 日期时间
- Codeforces Beta Round #4 (Div. 2 Only) A. Watermelon 水题
- nginx做域名转发和uri转发
- Lua学习笔记--面向对象
- 玩转Podfile
- bzoj 2946/Spoj 8222 后缀自动机
- PVS高可用的第二种方法——BDM启动
- 神经网络之BP神经网络
- 现代汉语句子成份——主谓宾、定状补
- hrbust 1578 哈理工oj 1578 Prince and little Princess-2【双向队列】
- 搭建高质量的Android项目框架系列二