2341. 数组能形成多少数对 【模拟】
题目
给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤:
- 从
nums选出 两个 相等的 整数 - 从
nums中移除这两个整数,形成一个 数对
请你在 nums 上多次执行此操作直到无法继续执行。
返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案,其中 answer[0] 是形成的数对数目,answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。
难度:简单
提示:
1 <= nums.length <= 1000 <= 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)

浙公网安备 33010602011771号