給你乙個整數陣列a
和乙個整數k
,請在該陣列中找出兩個元素,使它們的和小於k
但盡可能地接近k
,返回這兩個元素的和。
如不存在這樣的兩個元素,請返回-1
。
示例 1:
輸入:a = [34,23,1,24,75,33,54,8], k = 60
輸出:58
解釋:34 和 24 相加得到 58,58 小於 60,滿足題意。
示例 2:
輸入:a = [10,20,30], k = 15
輸出:-1
解釋:我們無法找到和小於 15 的兩個元素。
1 <= a.length <= 100
1 <= a[i] <= 1000
1 <= k <= 2000
傳統的 twosum 都是要你找到等於 target 的配對,那麼如果說要找到 大於/小於 target 的配對呢?
這個時候 hash 表的方法就很難 work 了,因為 hash 表比較適合處理等於的情況 !
那麼就需要考慮如何使用排序加雙指標的方法來解決這個問題,這裡,題目是要求小於 target 的數量,我們還是按照之前的分析思路來分析。
如果說當前左右指標指向的元素的和大於或者等於 target,那麼勢必我們需要向左移動右指標,讓兩個元素的和盡可能地小。
當前頭尾指標指向的元素和小於 target 的時候,這時我們需要記錄答案,雖然這道題目裡面沒提,如果說要記錄配對數量的話,這時並不是記錄乙個答案,如果說當前左指標固定,除了當前的右指標指向的元素,在左指標和右指標之間的數都是滿足要求的,我們只需要加上這個區間的數量即可。
當然如果陣列中存在重複元素,那麼我們就需要按照之前的套路遍歷去重了,當然對於這道題來說,我們選擇滿足條件的最大值即可。
public int twosumlessthank(int a, int k)
arrays.sort(a);
int l = 0, r = a.length - 1;
int result = integer.min_value;
while (l < r) else
}return result == integer.min_value ? -1 : result;
}
小於K的兩數之和
給你乙個整數陣列a和乙個整數k,請在該陣列中找出兩個元素,使它們的和小於k但盡可能地接近k,返回這兩個元素的和。如不存在這樣的兩個元素,請返回 1。示例1 輸入 a 34,23,1,24,75,33,54,8 k 60 輸出 58 解釋 34 和 24 相加得到 58,58 小於 60,滿足題意。示...
1099 小於 K 的兩數之和
題目描述 給你乙個整數陣列 a 和乙個整數 k,請在該陣列中找出兩個元素,使它們的和小於 k 但盡可能地接近 k,返回這兩個元素的和。如不存在這樣的兩個元素,請返回 1。示例 1 輸入 a 34,23,1,24,75,33,54,8 k 60 輸出 58 解釋 34 和 24 相加得到 58,58 ...
兩數之和,三數之和
兩數之和 方法一 暴力 throw new illegalargumentexception 時間複雜度 o n 2 空間複雜度 o 1 public int twosum int nums,int target throw newillegalargumentexception no twosum...