class Solution {
public:
vector<int> numberOfPairs(vector<int>& nums) {
}
};
2341. 数组能形成多少数对
给你一个下标从 0 开始的整数数组 nums
。在一步操作中,你可以执行以下步骤:
nums
选出 两个 相等的 整数nums
中移除这两个整数,形成一个 数对请你在 nums
上多次执行此操作直到无法继续执行。
返回一个下标从 0 开始、长度为 2
的整数数组 answer
作为答案,其中 answer[0]
是形成的数对数目,answer[1]
是对 nums
尽可能执行上述操作后剩下的整数数目。
示例 1:
输入:nums = [1,3,2,1,3,2,2] 输出:[3,1] 解释: nums[0] 和 nums[3] 形成一个数对,并从 nums 中移除,nums = [3,2,3,2,2] 。 nums[0] 和 nums[2] 形成一个数对,并从 nums 中移除,nums = [2,2,2] 。 nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [2] 。 无法形成更多数对。总共形成 3 个数对,nums 中剩下 1 个数字。
示例 2:
输入:nums = [1,1] 输出:[1,0] 解释:nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [] 。 无法形成更多数对。总共形成 1 个数对,nums 中剩下 0 个数字。
示例 3:
输入:nums = [0] 输出:[0,1] 解释:无法形成数对,nums 中剩下 1 个数字。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2023-02-16 09:09:08
func numberOfPairs(nums []int) []int { cnt := map[int]bool{} res := 0 for _, num := range nums { cnt[num] = !cnt[num] if !cnt[num] { res++ } } return []int{res, len(nums) - 2*res} }
java 解法, 执行用时: 1 ms, 内存消耗: 40.3 MB, 提交时间: 2023-02-16 09:08:54
class Solution { public int[] numberOfPairs(int[] nums) { Map<Integer, Boolean> cnt = new HashMap<Integer, Boolean>(); int res = 0; for (int num : nums) { cnt.put(num, !cnt.getOrDefault(num, false)); if (!cnt.get(num)) { res++; } } return new int[]{res, nums.length - 2 * res}; } }
javascript 解法, 执行用时: 64 ms, 内存消耗: 41.3 MB, 提交时间: 2023-02-16 09:08:32
/** * @param {number[]} nums * @return {number[]} */ var numberOfPairs = function(nums) { const cnt = new Map(); let res = 0; for (const num of nums) { cnt.set(num, !(cnt.get(num) || false)); if (!cnt.get(num)) { res++; } } return [res, nums.length - 2 * res]; };
python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2023-02-16 09:08:09
# 哈希表 class Solution: def numberOfPairs(self, nums: List[int]) -> List[int]: cnt = defaultdict(bool) res = 0 for num in nums: cnt[num] = not cnt[num] if not cnt[num]: res += 1 return [res, len(nums) - 2 * res]
golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2022-08-02 15:55:46
func numberOfPairs(nums []int) []int { pairs := 0 vis := map[int]bool{} for _, v := range nums { if vis[v] { pairs++ } vis[v] = !vis[v] } return []int{pairs, len(nums) - pairs*2} }
python3 解法, 执行用时: 40 ms, 内存消耗: 14.8 MB, 提交时间: 2022-08-02 15:55:21
class Solution: def numberOfPairs(self, nums: List[int]) -> List[int]: pairs = sum(c // 2 for c in Counter(nums).values()) return [pairs, len(nums) - pairs * 2]