1/*2題目描述:乙個陣列是由乙個遞減數列左移若干位形成的,比如是由陣列
3左移兩位形成的。寫乙個程式,實現查詢這種陣列中的某乙個數的功能。4*/
56 #include7 #include
8 #include9
using
namespace
std;
1011
const
int not_found = -1;12
13//
key為要找的值.
14int find(int arr, int len, int
key)
1531 low =pos;
32 high = (low + len - 1)%len;
33bool lowlhigh = true;34
35//
只有左移0位(即原陣列不移動)的情況下,才會有low36
if(low 37 lowlhigh = true;38
else
39 lowlhigh = false;40
41bool isfirst = true;42
43//
while結束的條件比較複雜.
44//
lowlhigh=true時:即low is in the left of high. 這時的迴圈跳出條件為low > high.即常規的二分查詢的情況.
4546
//lowlhigh=false時,即low is in the right of high. 這時的迴圈跳出條件是low再次等於(high+1)%len(因為
47//
剛開始的時候也是這種情況)。
48while( (lowlhigh&&low1)%len ) ) )
4960
return
not_found;61}
6263
64int
main()65;
6768
//key = [0..10]均通過測試。
69int
key;
70while(cin >>key)
7174
75return0;
76 }
左移遞減數列查詢某乙個數
微軟 運算 乙個陣列是由乙個遞減數列左移若干位形成的,比如 是由左移兩位形成的,在這種陣列中 include include includeusing namespace std int findnumberinleftshiftsequence int a,int nlen,int expecte...
求先遞增在遞減陣列中的最大值
題目 乙個陣列先從小到大遞增在從大到小遞減,找出陣列的最大值。思路 可以依次遍歷整個陣列如果array i 滿足array i array i 1 array i array i 1 那麼i就是最大元素的下標,但是這樣做的時間複雜度為o n 對於有序陣列我們可以採用二分查詢的方法降低時間複雜度,實現...
C 查詢先非嚴格遞增後非嚴格遞減陣列的最大值
題目 如標題 例子 測試了別的也ok left和right是為了找到他左右兩邊第乙個和它不等的數,注意不要下標溢位 在判斷nums mid 處於非遞減還是非遞增還是最大的時候一定要注意等號,因為可能乙個不小心就跑到break那裡去了。因為在邊界的時候nums left nums mid 或nums ...