小於 K 的兩數之和

2021-09-27 06:53:33 字數 1334 閱讀 6500

給你乙個整數陣列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...