06旋转数组的最小数字
//旋转数组的最小数字 //把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 //思路:两个前后指针进行比较; //先找到分界点;分三种情况,第一种就是前面中间和后面的元素相等,只能顺序查找; //第二种,中间元素位于前面的递增数组;第三种情况,中间元素位于后面的数组 class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { int size = rotateArray.size(); if (size == 0) { return 0; } //前后两个指针向中间靠拢 int left = 0; int right = size - 1; int mid = 0; //旋转的条件:rotateArray[left] >= rotateArray[right] while (rotateArray[left] >= rotateArray[right]) { //分界点 if (right - left == 1) { mid = right; break; } //第一种情况--顺序查找 mid = (right - left) / 2; if (rotateArray[left] == rotateArray[right] && rotateArray[left] == rotateArray[mid]) { int tmp = rotateArray[left]; for (int i = left+1; i < right; i++) { if (rotateArray[i] < tmp) { tmp = rotateArray[i]; } } return tmp; } //第二种情况-在数组的左侧 if (rotateArray[mid] >= rotateArray[left]) { left = mid; } //第三种情况-在数组的右侧 else { right = mid; } } return rotateArray[mid]; } };
在代码的世界尽情的翱翔吧!