求解旋轉(zhuǎn)數(shù)組的最小數(shù)字
求解旋轉(zhuǎn)數(shù)組的最小數(shù)字
題目描述:
把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。輸入一個遞增排序的數(shù)組的一個旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小數(shù)組。例如數(shù)組{3,4,5,1,2}是數(shù)組{1,2,3,4,5}的旋轉(zhuǎn)數(shù)組,該數(shù)組的最小值為1。
思路解析:
O(N)的算法
這種算法的思想就是遍歷這個數(shù)組,由于這個數(shù)組是兩部分有序的數(shù)組,因此遍歷這個數(shù)組時當(dāng)后一個數(shù)字小于前一個數(shù)字時,則后一個(即較?。┮欢檎麄€數(shù)組中最小的數(shù)字。
這種算法的思想很簡單,但就是時間復(fù)雜度較大,因此不是很好的算法。
int minNumberInRotateArray(vector<int> rotateArray) { if (rotateArray.empty()) return -1; unsigned int i=0; for (; i<rotateArray.size()-1; i++) { if (rotateArray[i] > rotateArray[i+1]) break; } return rotateArray[i+1]; }
O(logN)的算法
這種算法思想類似于二分查找,首先每次找到數(shù)組中中間的數(shù)字mid,如果mid大于最左端left,說明最小數(shù)在mid的右側(cè)區(qū)間,則改變left,置left為mid;如果mid小于數(shù)組右側(cè)right,說明最小數(shù)在mid的左側(cè)區(qū)間,則改變right為mid….當(dāng)left的數(shù)字小于等于right的數(shù)字時,說明已經(jīng)找到最小數(shù),這個也是循環(huán)結(jié)束的條件
int minNumberInRotateArray(vector<int> rotateArray) { if (rotateArray.empty()) return -1; unsigned int left=0; unsigned int right=rotateArray.size()-1; unsigned int mid=left; while (rotateArray[left] >= rotateArray[right]) { if (right-left == 1) { mid = right; break; } mid = left+((right-left)>>1); if (rotateArray[mid]==rotateArray[left] && rotateArray[right]==rotateArray[mid]) return rotateArray[mid]; if (rotateArray[mid] >= rotateArray[left]) left = mid; else if (rotateArray[mid] <= rotateArray[right]) right = mid; } return rotateArray[mid]; }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++詳解使用floor&ceil&round實現(xiàn)保留小數(shù)點后兩位
這篇文章主要介紹了C++使用floor&ceil&round實現(xiàn)保留小數(shù)點后兩位的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07解析設(shè)計模式中的Prototype原型模式及在C++中的使用
這篇文章主要介紹了設(shè)計模式中的Prototype原型模式及在C++中的使用,需要的朋友可以參考下2016-03-03c語言中g(shù)etch,getche,getchar的區(qū)別
getche() 和getch()很相似,它也需要引入頭文件conio.h,那它們之間的區(qū)別又在哪里呢?不同之處就在于getch()無返回顯示,getche()有返回顯示2013-09-09VC編程控件類HTControl之CHTGDIManager GDI資源管理類用法解析
這篇文章主要介紹了VC編程控件類HTControl之CHTGDIManager GDI資源管理類用法解析,需要的朋友可以參考下2014-08-08