标签:vector turn 数组 序列 问题 递增 一个 ret ==
(3)循环的终止条件为: high-low==1; 因为到了两个指针相邻的地方,那么其实high 所对应的值即是最小值
class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { if(rotateArray.empty()) return 0; //第一种情况 全是递增 后面比前面大 两个指针操作 【12345】 //第二种情况 有可能相等的递增 【01111】 [11101] //第三种情况 递增数 只把后面0个转到前面来 int low=0; int high=rotateArray.size()-1; int mid=0; while(rotateArray.at(low)>=rotateArray.at(high)) { if (high-low==1) { return rotateArray.at(high); } mid=(low+high)/2; //第二种情况 三个都相等 if (rotateArray.at(low)==rotateArray.at(mid)&&rotateArray.at(low)==rotateArray.at(high)) return order(rotateArray);//去顺序查找 if(rotateArray.at(low)<=rotateArray.at(mid))//注意 有等于号 low=mid; else if(rotateArray.at(low)>=rotateArray.at(mid)) high=mid; } return rotateArray.at(low); } public: int order(vector<int> rotateArray) { int SIZE=rotateArray.size(); int min=rotateArray.at(0); for (int i=0;i<SIZE;i++) { if (rotateArray.at(i)<min) min=rotateArray.at(i); } return min; } };
标签:vector turn 数组 序列 问题 递增 一个 ret ==
原文地址:https://www.cnblogs.com/cgy1012/p/11371967.html