【Leetcode】移除后集合的最多元素数

目录

💡题目描述

💡思路

💡总结


100150. 移除后集合的最多元素数

💡题目描述

给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,它们的长度都是偶数 n 。

你必须从 nums1 中移除 n / 2 个元素,同时从 nums2 中也移除 n / 2 个元素。移除之后,你将 nums1 和 nums2 中剩下的元素插入到集合 s 中。

返回集合 s可能的最多包含多少元素。

💡思路

这道题是求两个数组 nums1 和 nums2 各移除长度的一半元素后,剩余元素组成的集合s可能包含的最大元素数量。

主要思路是:

  1. 将nums1和nums2中的元素分别放入两个无序集set1和set2中,统计两个集合的大小n1和 n2,以及公共元素数量common

  2. 计算如果不移除任何元素,集合s可能包含的最大元素数量为n1+n2-common

  3. 考虑是否需要从set1和set2中各移除长度一半的元素:

  • 如果set1大小大于长度一半,从答案和公共元素中分别减去set1大于长度一半的部分
  • 如果set2大小大于长度一半,也进行同样的减法操作
  1. 返回经过以上处理后的最大可能元素数量

主要步骤如下:

  1. 将nums1和nums2中的元素分别放入set1和set2
  2. 统计set1大小n1,set2大小n2,公共元素数量common
  3. 总元素数量为n1+n2-common
  4. 定义长度一半为m
  5. 如果set1大于m,答案和common分别减去set1大于m的部分
  6. 如果set2大于m,也进行同样减法
  7. 返回答案

所以这道题是通过无序集合统计元素情况,并考虑是否需要移除长度一半的元素后,返回集合s可能包含的最大元素数量。

cpp 复制代码
class Solution {
public:
    int maximumSize(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> set1, set2;
        
        for(int num: nums1) set1.insert(num);
        for(int num: nums2) set2.insert(num);
        
        int n1 = set1.size(), n2 = set2.size();
        int common = 0;
        
        for(int num: set1) {
            if(set2.count(num)) common++; 
        }
        
        int ans = n1 + n2 - common;
        int m = nums1.size()/2; 
        
        if(n1 > m) {
            int mn = min(n1-m, common);
            ans -= n1 - mn - m;
            common -= mn;
        }
        
        if(n2 > m) {
            n2 -= min(n2-m, common); 
            ans -= n2 - m;
        }
        
        return ans;
    }
};

💡总结

主要步骤:

  1. 使用unordered_set存储nums1和nums2元素
  2. 统计set1,set2大小和公共元素数量
  3. 初始答案为set1+set2-公共元素
  4. 定义长度一半为m
  5. 如果set大小大于m,答案和公共元素分别减去大于m部分
  6. 返回最终答案

总的来说就是利用无序集合统计元素情况,并考虑是否需要移除长度一半元素来返回最大可能元素数量。

相关推荐
Coovally AI模型快速验证4 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun4 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
RaymondZhao345 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng11335 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
圣保罗的大教堂5 小时前
leetcode 2348. 全 0 子数组的数目 中等
leetcode
啊阿狸不会拉杆6 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路6 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
你知道网上冲浪吗7 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
地平线开发者8 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy9 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率