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

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

时间:2024-05-01 21:22:25浏览次数:20  
标签:元素 common set2 移除 集合 n2 nums1 nums2

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)

在这里插入图片描述

标签:元素,common,set2,移除,集合,n2,nums1,nums2
From: https://www.cnblogs.com/moonfdd/p/18169658

相关文章

  • 力扣-83. 删除排序链表中的重复元素
    1.题目题目地址(83.删除排序链表中的重复元素-力扣(LeetCode))https://leetcode.cn/problems/remove-duplicates-from-sorted-list/题目描述给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1......
  • 力扣-203. 移除链表元素
    1.题目题目地址(203.移除链表元素-力扣(LeetCode))https://leetcode.cn/problems/remove-linked-list-elements/题目描述给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。 示例1:输入:head=[1,2,6,3,4,5,......
  • 347. 前 K 个高频元素(leetcode)
    https://leetcode.cn/problems/top-k-frequent-elements/description/可以考虑使用HashMap+排序,不过直接使用优先队列也挺不错,可以使用大顶堆或小顶堆classSolution{publicint[]topKFrequent(int[]nums,intk){Map<Integer,Integer>map=newHas......
  • 【Redis】Redis的操作命令(五)——Redis 有序集合(sorted set)
    有序集合添加元素ZADDrunoobkey1redis有序集合移除元素ZRANGErunoobkey010WITHSCORES有序集合命令命令说明例子ZADDkeyscore1member1[score2member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数 ZCARDkey获取有序集合的成员数 ......
  • 对象属性值按长度拆分扩展一个新集合
    packagecom.xx.xx.core.utils;importcn.hutool.core.util.ReflectUtil;importcom.xx.tools.utils.BeanUtil;importcom.xx.tools.utils.StringUtil;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importlombok.experimen......
  • 利用二分法删除数组中元素
    二分法的思想主要是要设定起始值和终点值,计算中值,和给定值进行比较,如果大于给定值,则将中值作为终点值,否则作为起始值,重新计算中值。#include<stdio.h>intmain(){intarray[10]={1,2,3,5,8,15,20,30,100,200};intfirst=0,end=9,middle=(first+end)/2,num,i;s......
  • cesium 加载各类地图的方法集合
    1.天地图服务//矢量底图viewer.imageryLayers.addImageryProvider(newCesium.WebMapTileServiceImageryProvider({url:"http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={T......
  • Go语言系列——数组和切片、可变参数函数、Maps、字符串、指针、结构体、方法、接口(一
    文章目录11-数组和切片数组数组的声明数组是值类型数组的长度使用range迭代数组多维数组切片创建一个切片切片的修改切片的长度和容量使用make创建一个切片追加切片元素切片的函数传递多维切片内存优化12-可变参数函数什么是可变参数函数语法通过一些例子理解可变参......
  • 使用jQuery实现元素的显示隐藏
    实现思路:通过jQuery的点击事件,对元素使用show()、hide()方法实现;也可以直接通过改变元素css样式实现。1、首先得有个html结构的文件<divclass="tel">安全公告</div><!--弹窗--><divclass="mask"><h4>注意事项</h4><p>1、注意电......
  • 【Redis】Redis的操作命令(四)——Redis 集合(SET)
    Redis的SET是String类型的无序列表。添加无序列表语句:SADDsetDemoredis获取无序列表语句SMEMBERSsetDemoRedis集合命令如下:命令描述例子SADDkeymember1[member2]向集合添加一个或多个成员 SCARDkey获取集合的成员数 SDIFFkey1[key2]返回......