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

news2024/9/24 3:30:05

目录

💡题目描述

💡思路

💡总结





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大小大于长度一半,也进行同样的减法操作

4.   返回经过以上处理后的最大可能元素数量

主要步骤如下:

  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可能包含的最大元素数量。

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. 返回最终答案

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

江科大STM32

目录 STM32简介 STM32简介 我们主要学习的就是STM32的外设。 NVIC&#xff1a;内核里面用于管理中断的设备&#xff0c;比如配置中断优先级这些东西SysTick&#xff1a;内核里面的定时器&#xff0c;主要用来给操作系统提供定时服务的&#xff0c;STM32是可以加入操作系统的&am…

SSD固态硬盘数据修复方案介绍

这么多故障的可能&#xff0c;那么固态硬盘SSD的数据修复&#xff0c;到底是否有办法呢&#xff1f;我们这里介绍两种尝试修复的方式&#xff0c;不能保证一定会成功。在你误删除一些文件的时候&#xff0c;可以尝试下&#xff0c;市场也有也有很多的修复软件。 方式1:采用修复…

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

[ffmpeg系列 03] 文件、流地址(视频)解码为YUV

一 代码 ffmpeg版本5.1.2&#xff0c;dll是&#xff1a;ffmpeg-5.1.2-full_build-shared。x64的。 文件、流地址对使用者来说是一样。 流地址(RTMP、HTTP-FLV、RTSP等)&#xff1a;信令完成后&#xff0c;才进行音视频传输。信令包括音视频格式、参数等协商。 接流的在实际…

day10 用栈实现队列 用队列实现栈

题目1&#xff1a;232 用栈实现队列 题目链接&#xff1a;232 用栈实现队列 题意 用两个栈实现先入先出队列&#xff08;一个入栈&#xff0c;一个出栈&#xff09;&#xff0c;实现如下功能&#xff1a; 1&#xff09;push&#xff1a;将元素x推到队列末尾 2&#xff09;…

MyBatisPlus-基本配置与常见应用

MyBatisPlus 一、快速入门 MyBatis Plus是基于MyBatis的增强工具&#xff0c;提供了更简单、更便捷的方式来操作数据库。它是一个功能丰富的ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;可以帮助开发人员更快速地进行数据库操作。 MyBatis Plus的主要特点如下&…

【知识点】:ECMAScript简介及特性

一.简介 什么是ECMAScript&#xff1f; ECMAScript是由网景的布兰登艾奇开发的一种脚本语言的标准化规范&#xff1b;最初命名为Mocha&#xff0c;后来改名为LiveScript&#xff0c;最后重命名为JavaScript。1995年12月&#xff0c;升阳与网景联合发表了JavaScript。1996年11月…

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目&#xff0c;命名为HelloWorld&#xff0c;点击Finish 选择Empty Ability模板&#xff0c;点击Next Hello World 项目已经成功创建&#xff0c;接来下看看效果 2.预览 Hello World 点击右侧的预…

K8s-应用数据

应用数据 1 应用数据解析 k8s应用数据类型和步骤解析 k8s如何使用数据功能 k8s使用各种数据类型的配置 2 应用数据实践 emptyDir实践 资源对象文件内容 apiVersion: v1 kind: Pod metadata:name: sswang-emptydir spec:containers:- name: nginx-webimage: kubernetes-reg…

操作系统内存碎片

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com&#xff0c;github地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家访问。 一、前言 内存碎片是指无法被利用的内…

C# 关于反射的简单示例

写在前面 在日常开发中&#xff0c;我们经常使用反射来动态获取关于类的信息&#xff0c;或者是动态给类实例成员赋值&#xff1b;反射提供了封装程序集、模块和类型的对象&#xff08;Type 类型&#xff09;。可以使用反射动态创建类型的实例&#xff0c;将类型绑定到现有对象…

关闭stp环路的实验演示

在日常的网络规划设计中&#xff0c;为了提高网络的可靠性&#xff0c;通常会采取链路冗余&#xff0c;但是会导致网络中形成环路。有的小伙伴就会发问了&#xff0c;明明增加了链路&#xff0c;网络的可靠性不仅没有提高&#xff0c;怎么反而导致了通信异常呢&#xff1f; 拓…

如何使用csdn中的c知道进行学习?

1.c知道 猜测是通过chatgpt训练链接到CSDN内部的文章内容等&#xff0c;进行生成的一款应用。 2.如何使用呢 打比方说&#xff0c;我想学习下多目标跟踪中的ukf&#xff0c;那么就可以输入这个关键字。 那既然是学习&#xff0c;就要进一步深究&#xff0c;有三种方式&#…

nacos server控制台打开页面空白

总结一下最近遇到的一个纠结很久的坑&#xff1b;通过docker的方式部署nacos server在服务器&#xff0c;部署启动一切正常&#xff0c;然后通过safari浏览器打开控制台的时候页面空白&#xff0c;只有一个标题&#xff1b;打开控制台报错&#xff1a;Failed to load resource:…

纳什议价解

纳什议价解 局中人在网络中所处的位置决定了他们的议价权&#xff0c;并最终导致不同的局中人在博弈中所获得的收益大小不同。下图给出了A、B、 C、D 四人参加网络交换博弈的一个稳定结局&#xff0c;其中粗线相连的节点之间达成交换&#xff0c;交换所得效益标记在了节点上方…

docker 安装elasticsearch、kibana、cerebro、logstash

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…

【SpringCloud Alibaba笔记】(2)Sentinel实现熔断与限流

Sentinel 概述 官网&#xff1a;https://github.com/alibaba/Sentinel 中文文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html 类似Hystrix&#xff0c;以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热…

JVM中虚拟机栈和本地方法栈等

jvm Java虚拟机栈本地方法栈 Java虚拟机栈 Java虚拟机栈&#xff08;VM Stack&#xff09; ​ 虚拟机栈是线程执行Java程序时&#xff0c;处理Java方法中内容的内存区域。虚拟机栈也是线程私有的区域&#xff0c;每个Java方法被调用的时候&#xff0c;都会在虚拟机栈中创建出…

实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024.1.7(测试成功)

title: 实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024.1.7(测试成功) date: 2024-1-7 categories: linux tags: promtheues summary: prometheusgrafana 更新于&#xff1a;2024年1月7日 实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024…

二叉树与堆的深度解析:数据结构中的关键概念及应用

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言树概念注意&#xff1a; 树的基本概念及术语基本概念及术语以家谱为例 树的表示孩子兄弟表示法简介优势应用示例 树在实际中的运用文件系统的目录树…