702 搜尋長度未知的有序陣列

2021-10-25 17:58:12 字數 1301 閱讀 9620

題目描述:

給定乙個公升序整數陣列,寫乙個函式搜尋 nums 中數字 target。如果 target 存在,返回它的下標,否則返回 -1。注意,這個陣列的大小是未知的。你只可以通過 arrayreader 介面訪問這個陣列,arrayreader.get(k) 返回陣列中第 k 個元素(下標從 0 開始)。

你可以認為陣列中所有的整數都小於 10000。如果你訪問陣列越界,arrayreader.get 會返回 2147483647。

樣例 1:

輸入: array = [-1,0,3,5,9,12], target = 9

輸出: 4

解釋: 9 存在在 nums 中,下標為 4

樣例 2:

輸入: array = [-1,0,3,5,9,12], target = 2

輸出: -1

解釋: 2 不在陣列中所以返回 -1

注釋 :

你可以認為陣列中所有元素的值互不相同。

陣列元素的值域是 [-9999, 9999]。

方法1:

主要思路:

(1)先確定搜尋的範圍,然後再在範圍內進行二分搜尋;

(2)由於元素值的範圍是 [-9999, 9999],而公升序陣列向上越界讀數時,獲得的返回值是2147483647,故一定能夠找到乙個最大值的邊界,然後進行二分搜尋(當然,target也可能很小,小於最小值,特殊情形處理);

/**

* // this is the arrayreader's api inte***ce.

* // you should not implement it, or speculate about its implementation

* class arrayreader ;

*/class

solution

if(reader.

get(0)

==target)

//找包含target的範圍

int left=0;

int right=1;

while

(reader.

get(right)

//在範圍內進行二分搜尋

while

(left<=right)

if(cur_v>target)

else

}//範圍內不存在,返回-1

return-1

;}};

合併N個長度為L的有序陣列為乙個有序陣列

方案一 新建乙個n l的陣列,將原始陣列拼接存放在這個大陣列中,再呼叫arrays.sort 進行排序,或者使用其它排序方法即可。其實這個題與合併鍊錶很像,但是如果沒有指定每個陣列的長度,做起來就不太方便,所以一般的前提就是陣列長度是一致的 class solution int col array ...

有序陣列的合併

includeusing namespace std define size 1024 1 如果可以申請輔助空間,那麼從前從後倒是沒什麼所謂吧,這就像是歸併的一次歸併了。void merge 1 int arr,int lenarr,int brr,int lenbrr while low1 len...

有序陣列的插入

習題1.9 有序陣列的插入 20 分 本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果依然有序。函式介面定義 bool insert list l,elementtype x 其中list結構定義如下 typedef int position typedef struct ln...