-
Notifications
You must be signed in to change notification settings - Fork 0
/
1099. Two Sum Less Than K.cpp
50 lines (45 loc) · 1.12 KB
/
1099. Two Sum Less Than K.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// ***
//
// Given an array nums of integers and integer k, return the maximum sum such that there exists i < j with nums[i] +
// nums[j] = sum and sum < k. If no i, j exist satisfying this equation, return -1.
//
// Example 1:
//
// Input: nums = [34,23,1,24,75,33,54,8], k = 60
// Output: 58
// Explanation: We can use 34 and 24 to sum 58 which is less than 60.
//
// Example 2:
//
// Input: nums = [10,20,30], k = 15
// Output: -1
// Explanation: In this case it is not possible to get a pair sum less that 15.
//
//
// Constraints:
//
// 1 <= nums.length <= 100
// 1 <= nums[i] <= 1000
// 1 <= k <= 2000
//
// ***
class Solution {
public:
int twoSumLessThanK(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int left = 0, right = nums.size() - 1;
int res = -1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == k) {
--right;
} else if (sum < k) {
res = max(res, sum);
++left;
} else if (sum > k) {
--right;
}
}
return res;
}
};