在左移遞減陣列中查詢其中的某乙個數(微軟面試題)

2022-04-10 02:17:43 字數 1139 閱讀 7181

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 ...