劍指offer 和為S的兩個數字

2022-04-29 16:51:10 字數 671 閱讀 9176

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。

對應每個測試案例,輸出兩個數,小的先輸出。

方法一:使用set儲存訪問過得結點,新結點array[i]判斷sum-array[i]是否在set中,時間複雜度為o(n),但是這種方法求得的是乘積最大值,不符合題意。

方法二:當前結點array[i],從後往前迴圈陣列判斷sum-array[i]是否存在,時間複雜度為o(n2)。若查詢sum-array[i]使用二分優化,時間複雜度為o(nlogn).

1

public arraylistfindnumberswithsum(int array,int sum) 11}

12}13return

re;14 }

方法三:頭尾指標,從兩邊往中間夾,時間複雜度為o(n)

1

public arraylistfindnumberswithsum(int array,int sum)

11else

if(array[i]+array[j]>sum)

14else17}

18return

re;19 }

相關題leetcode1 兩數之和 

劍指offer 和為S的兩個數字

esmp esmp 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 esmp esmp 對應每個測試案例,輸出兩個數,小的先輸出。esmp esmp 首先,先考慮在遞增排序的陣列中找到兩個和為s的數字。這個思路...

劍指offer 和為S的兩個數字

題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。ps 拋物線開口向下,找到的第一組 相差最大的 就是乘積最小的,不需要比較 class solution in...

劍指offer 和為s的兩個數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。雙指標,乙個從左向右遍歷,乙個從右向左遍歷。coding utf 8 class solution deffindnum...