旋轉陣列的最小值

2021-09-21 14:42:52 字數 1288 閱讀 4496

1 基本思路:旋轉陣列的特點:旋轉陣列只有在旋轉的介面處(旋轉前陣列的最後乙個元素和旋轉前陣列的第乙個元素拼接的地方)會出現下降,其餘大部分都是非遞減的。利用這個特點,只要找到旋轉陣列中第乙個比前乙個元素小的元素,該元素就是旋轉前陣列的第乙個元素,因為旋轉前陣列時非遞減的,所以該元素即為陣列中最小元素。這是一般情況。

還需要考慮兩個特殊情況:第乙個是比較常規的特殊情況,就是陣列長度為0的時候,返回值為0;第二個是由於旋轉前陣列時非遞減的,所以陣列中的元素可能全部相等,此時返回陣列中任意乙個元素即可。

2 具體**

class solution {

public:

int minnumberinrotatearray(vectorrotatearray) {

//如果旋轉陣列長度為0

if(rotatearray.size()==0)

return 0;

//如果旋轉陣列中的元素全相等,返回陣列任意乙個元素即可

bool isallequal=true;

for(int i=0;i報錯:

原因:有些編譯器因為所有的返回值都在條件語句中,所以報錯。調整一下程式結構,使得至少乙個返回值不在條件語句中。

調整**:

class solution {

public:

int minnumberinrotatearray(vectorrotatearray) {

//如果旋轉陣列長度為0

if(rotatearray.size()!=0)

{//如果旋轉陣列中的元素全相等,返回陣列任意乙個元素即可

bool isallequal=true;

for(int i=0;i執行正確。

補充說明:這裡有一種特殊情況,應為處理方式相同,所有隱藏在了**裡面,但是不代表不需要考慮。

看到程式中的for迴圈中i的取值是從0到rotatearray.size()-1,左閉右開。當rotatearray.size()==1時(即rotatearray中只有乙個元素),這個迴圈會一次都不執行。由於用於判斷陣列中全部元素相等的標誌變數isallequal預設為true,因為沒有執行迴圈,isallequal最終仍為true,這和實際情況中的結果是一致的:即陣列只有乙個元素時,陣列中全部元素相等,所以這種特殊情況可以歸在普通情況的**中。

3 收穫:

一般報錯 control may reach end of non-void function是因為函式的所有返回值均在條件語句中,這時候只需要調整乙個return語句不在條件語句中,既可編譯通過。

旋轉陣列的最小值

題目 把乙個陣列的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小值。例如陣列為的乙個旋轉,該陣列的最小值為1。解析 1 我們可以用順序查詢的方法找到陣列中的最小值,但是這個方法沒有用到旋轉陣列區域性有序的特點。2 和二分查詢法一樣,我們用兩個指標...

旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 類似二分查詢,不斷縮小查詢範圍 int minnumberinro...

旋轉陣列的最小值

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...