給你乙個整數陣列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 的兩個元素
思路:首先對陣列進行排序。然後左指標指向第乙個元素,右指標指向第二個元素。將左指標和右指標對應的值相加,如果》=k,則右指標移動一位。如果小於k,則左指標移動一位。
例子:陣列:k=60
1,8,33,54,23,34,24,75
排序後:
1 8 23 24 33 34
54 75
l r
1+75>k,r移動一位
1 8 23 24 33 34
54 75
l r
1+54 < k,l移動一位,此時記錄sum=55
1 8 23 24 33 34
54 75
l r
8+54 > k, r移動一位
1 8 23 24 33 34
54 75
l r
8+34 < k,l移動一位
1 8 23 24 33 34
54 75
l r
23+34 < k,l移動一位。此時的值為57>sum,因此sum更新為57
1 8 23 24 33 34
54 75
l r
24+34 < k, l移動一位,此時值為58大於sum,sum更新為58
1 8 23 24 33 34
54 75
l r
33+34 > k,r 移動一位,此時l=r,退出迴圈。最終得到的sum值為58
對應**如下:
void insert_sort(int arrary,int len)}}
int twosumlessthank(int a, int len,int k)else
}//如果sum值一直等於初始值,證明不存在這樣的兩個元素,則返回-1
return sum == a[left]?-1:sum;
}
小於 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...