山东菏泽网站建设,百度智能建站系统,抚顺市建设局网站,网站忘记备案【LetMeFly】2341.数组能形成多少数对
力扣题目链接#xff1a;https://leetcode.cn/problems/maximum-number-of-pairs-in-array/
给你一个下标从 0 开始的整数数组 nums 。在一步操作中#xff0c;你可以执行以下步骤#xff1a;
从 nums 选出 两个 相等的 整数从 nums…【LetMeFly】2341.数组能形成多少数对
力扣题目链接https://leetcode.cn/problems/maximum-number-of-pairs-in-array/
给你一个下标从 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 1000 nums[i] 100
方法一哈希表
我们可以使用一个哈希表来统计某个数x是否出现过。开辟长度为100的数组来统计也可以
初始时哈希表为空接着遍历原始数组如果数组中的某个数在哈希表中则“配对成功”成功次数加一并将这个数从哈希表中移除否则直接将这个数插入哈希表中等待配对即可。
最终返回配对成功次数,原始数组长度−2×配对成功次数{配对成功次数, 原始数组长度 - 2\times 配对成功次数}配对成功次数,原始数组长度−2×配对成功次数即可
时间复杂度O(len(nums))O(len(nums))O(len(nums))空间复杂度O(len(nums))O(len(nums))O(len(nums))
AC代码
C
class Solution {
public:vectorint numberOfPairs(vectorint nums) {unordered_setint se;int cntPair 0;for (int t : nums) {if (se.count(t)) {se.erase(t);cntPair;}else {se.insert(t);}}return {cntPair, (int)nums.size() - cntPair * 2};}
};Python
# from typing import Listclass Solution:def numberOfPairs(self, nums: List[int]) - List[int]:se set()cntPair 0for i in nums:if i in se:se.remove(i)cntPair 1else:se.add(i)return [cntPair, len(nums) - cntPair * 2]同步发文于CSDN原创不易转载请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/129055398