找出有序陣列中和等於指定數的兩個數

2021-07-16 16:17:18 字數 599 閱讀 1347

題目:已知按序排列的整數陣列,輸入任意數number,當陣列中某兩數之和等於number時,列印出兩個數。

要求:複雜度為o(n)

解法:陣列已是有序排列,且兩個加數一定滿足條件:較小加數<= (number/2) <= 較大加數;那麼只需要找出該陣列的較小加數和較大加數分界index,以該分界為起點分別往左右兩邊逐個取值匹配。

若兩數之和》number,說明較小加數還要再小,向陣列的較小值方向移位取值與原較大值重新匹配。

若兩數之和

1

public

void seachadden(int number, int

arry) 9}

10if (midindex != -1) else

if (arry[smallerindex] + arry[biggerindex]

27 } while ((smallerindex >= 0) && (biggerindex <= arry.length - 1));28}

29if (result == false

) 32 }

好文要頂

關注我收藏該文

排序陣列,找出兩個和等於指定數

題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。解 如果只是最簡單的遍歷,時間複...

找出有序陣列中絕對值最小的數

假設陣列是從小到大排序,數值可能為負數 0 正數。思路一 可以一次性遍歷一遍,找出絕對值最小值,此時時間複雜度為o n 缺點是沒有利用陣列是有序的這一特點。思路二 陣列有序,可以利用二分查詢的特性。中間的數是正數,往後找 中間的數是負數,往前找。問題的本質是找到正數的最小值,或負數的最大值,分析以下...

有序陣列中找出給定數字的出現次數

問題 在排序陣列中,找出給定數字的出現次數,比如 1,2,2,2,3 中2的出現次數是3次。解答 使用二分查詢的方法分別找出給定數字的開始位置minindex和結束位置maxindex,最壞情況下時間複雜度為o logn 簡單 如下 二分搜尋 2.找 最大 下標i使得x i v 返回 i 或者 1 ...