列表

详情


2341. 数组能形成多少数对

给你一个下标从 0 开始的整数数组 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 个数字。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> numberOfPairs(vector<int>& nums) { } };

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]

上一题