題目描述:
給定乙個公升序整數陣列,寫乙個函式搜尋 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...