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: 输入: [ ...
随机推荐
- Mac M芯片使用PD安装centos7无页面安装
1.选择Centos镜像 点击继续 设置虚拟机名称: 点击创建 : 选择第一个回车开始下载系统,下载完成进入设置页面,首先输入 1 设置语言: 进入语言设置,选择77普通话: 选择c继续,又回到系统配 ...
- python [pymysql] 操作MySQL数据库
python [pymysql] 操作MySQL数据库 连接.关闭数据库 def get_conn_(): """ :return: 连接,游标 "" ...
- 【已解决】Hadoop_07 Hadoop启动超时失败
- Python表格处理模块xlrd在Anaconda中的安装
本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法. xlrd是一个用于读取Excel文件的Python库,下面是xlrd库的一些主要特点和功能: 读 ...
- #贪心#CF605A Sorting Railway Cars
题目 一个长度为 \(n\) 的排列,每次可以将一个数移至开头或者结尾,问最少多少次使其升序排列 分析 让数字连续的情况尽量多才能让移出来的次数尽量少, 找到最长的数字连续段,若其长度为 \(len\ ...
- #保序回归问题,单调栈,二分#洛谷 5294 [HNOI2019]序列
题目 给定一个长度为 \(n\) 的序列 \(A\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k\). 第一次修改之前及每次修改之后,都要求你找到一个同样长度为 \(n\ ...
- #莫比乌斯反演,整除分块#洛谷 6222 「P6156 简单题」加强版
题目 多组询问,给出\(n,k\) 求 \[\sum_{i=1}^n\sum_{j=1}^n(i+j)^kgcd(i,j)\mu^2(gcd(i,j)) \] 对\(\text{unsigned}\) ...
- 组合数学——Min-Max容斥
Min-Max 容斥,即 $$\max(S)=\sum_{T\in S,T\neq\emptyset}(-1)^{|T|-1}\min(T)$$ 接下来证明上面那个式子是对的.定义 \(S\) 中共有 ...
- C# 方法参数中的this参数
引用:C# 方法中的this参数 - zh89233 - 博客园 (cnblogs.com) public static class StringExtension { public static v ...
- Windows编译PDF库:libharu
libharu编译需要libpng,libpng依赖zlib,所以需要下载这三个库 libharu下载:http://libharu.org/ libpng下载:http://www.libpng.o ...