rotateArrayMin旋轉陣列的最小數字

2021-08-14 09:16:46 字數 1740 閱讀 6752

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

牛客url

這是一道二分查詢變形的題目

class solution 

int mid = left + (right - left) /2 ;

if ( rotatearray[mid] >= rotatearray[left]) else

if ( rotatearray[mid] <= rotatearray[right])

}return min;

}};

直接返回第乙個元素即可;

int

min = rotatearray[left];

一組例子:{1,0,1,1,1} 和 {1,1, 1,0,1} 都可以看成是遞增排序陣列{0,1,1,1,1}的旋轉。

這種情況下我們無法繼續用上一道題目的解法,去解決這道題目。因為在這兩個陣列中,第乙個數字,最後乙個數字,中間數字都是1。

這只能使用順序查詢的方法;

#include 

#include

#include

#include

#include

using

namespace

std;

class solution

int left = 0,right = size - 1;

int mid = 0;

// rotatearray[left] >= rotatearray[right] 確保旋轉

while(rotatearray[left] >= rotatearray[right])//if

mid = left + (right - left) / 2;

// rotatearray[left] rotatearray[right] rotatearray[mid]三者相等

// 無法確定中間元素是屬於前面還是後面的遞增子陣列

// 只能順序查詢

if(rotatearray[left] == rotatearray[right] && rotatearray[left] == rotatearray[mid])//if

// 中間元素位於前面的遞增子陣列

// 此時最小元素位於中間元素的後面

if(rotatearray[mid] >= rotatearray[left])//if

// 中間元素位於後面的遞增子陣列

// 此時最小元素位於中間元素的前面

else//else

}//while

return rotatearray[mid];

}private:

// 順序尋找最小值

int minorder(vector

&num,int left,int right)//if

}//for

return result;

}}; 

int main();

//vectornum = ;

vector

num = ;

int result = s.minnumberinrotatearray(num);

// 輸出

cout

0;}

LibGdx RevoluteJoint旋轉關節

package com.joye3g.joint import com.badlogic.gdx.gdx import com.badlogic.gdx.graphics.gl10 import com.badlogic.gdx.graphics.orthographiccamera import ...

iOS旋屏控制

自己在網上搜相關的資料時,看到很多地方說去控制 shouldautorotatetointe ceorientation 這個方法。然而這個方法在ios5以後就沒有用了。對於旋屏現在主要是這兩個方法 當前ios8 bool shouldautorotate nsuinteger supportedi...

UICollectionView 與螢幕旋轉 問題

原來的 我有乙個使用 庫檢視uicollectionview與uicollectionviewflowlayout,它有pagingenabled和滾動水平顯示一次只有乙個檢視。直到我試著旋轉它非常適合.當我在旋轉裝置,willrotatetointe ceorientation duration ...