题目
给你一个下标从 0 开始的整数数组 nums
。在一步操作中,你可以执行以下步骤:
- 从
nums
选出 两个 相等的 整数 - 从
nums
中移除这两个整数,形成一个 数对
请你在 nums
上多次执行此操作直到无法继续执行。
返回一个下标从 0 开始、长度为 2
的整数数组 answer
作为答案,其中 answer[0]
是形成的数对数目,answer[1]
是对 nums
尽可能执行上述操作后剩下的整数数目。
难度:简单
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100
题解
按照题目模拟即可。
class Solution {
public int[] numberOfPairs(int[] nums) {
int count = 0, surplus = 0;
HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>(10);
for (int num : nums) {
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
if (entry.getValue() % 2 != 0) {
surplus++;
}
count += entry.getValue() / 2;
}
return new int[]{count, surplus};
}
}
本题数据量不大,更快的做法是用数组代替HashMap计数去重。
复杂度分析
- 时间复杂度:O(N)
- 空间复杂度:O(N)