LeetCode 5618. K 和数对的最大数目【Java】
原题链接
中等
作者:
ACSaber
,
2020-12-06 17:25:49
,
所有人可见
,
阅读 274
class Solution {
public int maxOperations(int[] nums, int k) {
int len = nums.length;
if (len == 0) return 0;
int ans = 0;
Arrays.sort(nums);
Map<Integer, Integer> map = new HashMap<>();
ArrayList<Integer> list = new ArrayList<>();
list.add(nums[0]);
for (int i : nums) {
map.put(i, map.getOrDefault(i, 0) + 1);
if (list.get(list.size() - 1) != i) list.add(i);
}
if (list.get(0) >= k) return 0;
if (list.get(list.size() - 1) < k / 2) return 0;
int i = 0;
while (i < list.size()) {
int a = list.get(i);
int b = k - a;
int cnt = 0;
if (map.containsKey(a) && map.containsKey(b)) {
if (map.get(a) == -1 || map.get(b) == -1) break;
if (a == b) {
cnt = map.get(a) / 2;
map.put(a, -1);
} else {
cnt = Math.min(map.get(a), map.get(b));
map.put(a, -1);
map.put(b, -1);
}
}
ans += cnt;
i++;
}
return ans;
}
}