3.6 旋轉陣列的最小數字
阿新 • • 發佈:2018-12-25
旋轉陣列的最小數字
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
方法一: 整體遍歷
int minNumberInRotateArray(vector<int> rotateArray) { int minVal = 0; if(rotateArray.size() <=0){ return minVal; } int start = rotateArray.size() -1; minVal = rotateArray[start]; for( start-=1;start>=0;start--){ if(minVal > rotateArray[start]){ minVal = rotateArray[start]; } } return minVal; }
測試方法一:
方法二: 二分查詢(條件:原陣列有序)
int minNumberInRotateArray(vector<int> rotateArray) { if (rotateArray.size()<=0){ return 0; } int left = 0; int right = rotateArray.size() - 1; int mid = -1; while(rotateArray[left] >= rotateArray[right]){ if(right -left == 1){ mid = right; break; } mid = left+(right - left)/2; if(rotateArray[mid] >= rotateArray[left]){ left = mid; } if(rotateArray[mid]<=rotateArray[right]){ right = mid; } } return rotateArray[mid]; }