2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s。 找出集合s中可能包含的最多元素数量。 输入:nums
2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2,
分别移除它们各自的一半元素,
将剩下的元素合并成集合s。
找出集合s中可能包含的最多元素数量。
输入:nums1 = [1,2,3,4,5,6], nums2 = [2,3,2,3,2,3]。
输出:5。
答案2024-05-01:
题目来自leetcode3002。
大体步骤如下:
1.创建两个空的布尔型map,分别为set1和set2,用于存储nums1和nums2中的元素。
2.遍历nums1,将元素添加到set1中,以便记录每个元素的出现情况。
3.遍历nums2,将元素添加到set2中,同样记录每个元素的出现情况。
4.记录两个数组的交集元素数量,这里用common表示。
5.获取set1和set2中各自不同元素的数量,分别为n1和n2。
6.初始化答案ans为n1 + n2 - common,即为合并后的集合s中可能包含的最多元素数量。
7.计算移除元素的数量m(即数组长度的一半)。
8.如果set1中的元素数量大于m,则进入条件判断:
找出需要移除的元素数量(mn)为n1 - m和common中较小的值。
更新答案ans,减去需要移除的元素数量。
更新common,减去移除的数量mn。
9.同样处理set2中的元素:
如果set2中的元素数量大于m,则继续进行下一步操作。
更新n2,减去需要移除的元素数量,确保集合s的大小不超过m。
更新答案ans,相应地减去多余的元素数量。
10.返回最终的答案ans。
总的时间复杂度为O(n),其中n表示nums1和nums2的总长度。
总的额外空间复杂度是O(n),主要用于存储set1和set2的元素。
Go完整代码如下:
package main
import (
"fmt"
)
func maximumSetSize(nums1, nums2 []int) int {
set1 := map[int]bool{}
for _, x := range nums1 {
set1[x] = true
}
set2 := map[int]bool{}
for _, x := range nums2 {
set2[x] = true
}
common := 0
for x := range set1 {
if set2[x] {
common++
}
}
n1 := len(set1)
n2 := len(set2)
ans := n1 + n2 - common
m := len(nums1) / 2
if n1 > m {
mn := min(n1-m, common)
ans -= n1 - mn - m
common -= mn
}
if n2 > m {
n2 -= min(n2-m, common)
ans -= n2 - m
}
return ans
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
nums1 := []int{1, 2, 3, 4, 5, 6}
nums2 := []int{2, 3, 2, 3, 2, 3}
result := maximumSetSize(nums1, nums2)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def maximumSetSize(nums1, nums2):
set1 = set(nums1)
set2 = set(nums2)
common = len(set1 & set2)
n1 = len(set1)
n2 = len(set2)
ans = n1 + n2 - common
m = len(nums1) // 2
if n1 > m:
mn = min(n1 - m, common)
ans -= n1 - mn - m
common -= mn
if n2 > m:
n2 -= min(n2 - m, common)
ans -= n2 - m
return ans
def min(a, b):
return a if a < b else b
if __name__ == "__main__":
nums1 = [1, 2, 3, 4, 5, 6]
nums2 = [2, 3, 2, 3, 2, 3]
result = maximumSetSize(nums1, nums2)
print(result)
2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s。 找出集合s中可能包含的最多元素数量。 输入:nums的更多相关文章
- 如何在EXCEL中找出第一列中不包含的第二列数据
1.找出第一列中不包含的第二列数据:=IFERROR(VLOOKUP(A:A,B:B,1,0),"无") 2.A列相同,B列相加:=SUMIF(G:G,G1,J:J)
- 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组
题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- 在线性级别时间内找出无序序列中的第k个元素
在一个无序序列中找出第k个元素,对于k很小或者很大时可以采取特殊的方法,比如用堆排序来实现 .但是对于与序列长度N成正比的k来说,就不是一件容易的事了,可能最容易想到的就是先将无序序列排序再遍历即可找 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- 找出Java进程中大量消耗CPU
原文:https://github.com/oldratlee/useful-shells useful-shells 把平时有用的手动操作做成脚本,这样可以便捷的使用. show-busy-java ...
- python -- 对list去重并找出列表list中的重复元素
一.一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数. 代码: from collections imp ...
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- Python算法每日一题--001--给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
随机推荐
- CA:用于移动端的高效坐标注意力机制 | CVPR 2021
论文提出新颖的轻量级通道注意力机制coordinate attention,能够同时考虑通道间关系以及长距离的位置信息.通过实验发现,coordinate attention可有效地提升模型的准确率, ...
- KingabseES-SQL优化_提升子查询
什么是提升子查询/子链接 SubLink,子查询/子链接,他们的区别:子查询不在表达式中子句,子链接在in/exists表达式中的子句. 若以范围表的方式存在,则是子查询: 若以表达式的存在,则是子连 ...
- kafka主题、消费者、生产者命令行操作
十二.Kafka (1)Topic 1)查看当前服务器中的所有topic bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --list 2) ...
- Minlexes题解
\(\texttt{Problem Link}\) 简要题意 在一个字符串 \(s\) 中,对于每个后缀,任意删掉一些相邻的相同的字符,使得字符串字典序最小. 注意:删掉之后拼起来再出现的相邻相同字符 ...
- 测试开发之系统篇-安装KVM虚拟机
虚拟机(Virtual Machine)和容器(Container)是两种流行的虚拟化技术. 虚拟机模拟机器的硬件,包括了完整的操作系统和应用,它一旦被开启,预分配给它的资源将全部被占用.容器是运行在 ...
- C++ 智能指针和内存管理:使用指南和技巧
C++是一门强大的编程语言,但是在内存管理方面却存在着一些问题.手动管理内存不仅费时费力,而且容易出错.因此,C++中引入了智能指针这一概念,以更好地管理内存. 什么是智能指针? 在C++中,内存的分 ...
- C# 做个Splash(启动屏幕)
现在有好些splash的做法,我的比较简单,而且如果你的素材不错的话,应该可以做出很好的效果,这个教程不依赖任何第三方控件,直接使用vs的就行了,下面这个是预览图: 正文开始: 我们首先新建一个win ...
- HarmonyOS如何使用异步并发能力进行开发
一.并发概述 并发是指在同一时间段内,能够处理多个任务的能力.为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略. ● 异步 ...
- WAF 原理入门
WAF 入门 WAF 功能 WAF 全称叫 Web Application Firewall,和传统防火墙的区别是,它是工作在应用层的防火墙,主要对 web 请求/响应进行防护.那么 WAF 有什么功 ...
- 局部区块多个报表 TAB 页切换及局部区块的参数查询
在企业的业务系统中,如何从纷繁复杂的数据中抽丝剥茧看到关键数据信息呢?一个重要的途径就是将企业和各部门运营中关键的 KPI 集中在一起显示,同时尽量省去在企业的各个业务系统中分别查找数据. 下面是我近 ...