写点什么

2024-05-01:用 go 语言,给定两个长度为偶数 n 的整数数组 nums1 和 nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合 s。 找出集合 s 中可能包含的最多元素数量。 输入:nums

  • 2024-05-01
    北京
  • 本文字数:1337 字

    阅读完需:约 4 分钟

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:


chatgpt


题目来自 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)
复制代码



发布于: 刚刚阅读数: 4
用户头像

公众号:福大大架构师每日一题 2021-02-15 加入

公众号:福大大架构师每日一题

评论

发布
暂无评论
2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s。 找出集合s中可能包含的最多元素数量。 输入:nums_福大大架构师每日一题_福大大架构师每日一题_InfoQ写作社区