Leetcode 3002. Maximum Size of a Set After Removals

2024-01-08 08:36

本文主要是介绍Leetcode 3002. Maximum Size of a Set After Removals,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • Leetcode 3002. Maximum Size of a Set After Removals
    • 1. 解题思路
    • 2. 代码实现
    • 3. 算法优化
  • 题目链接:10037. Maximum Size of a Set After Removals

1. 解题思路

这一题的话我的思路就是分别以两个数组作为主数组,然后从中选择 n / 2 n/2 n/2个元素,并使得另一个数组当中不包含这些数字,然后考察剩下的那个数组当中可以保留下多少数字,两者加和即可得到对应取法下的最大值。

对此,我们只需要先将主数组当中的元素按照另一个数组当中出现的频次进行排序然后顺序选取即可。

然后,我们从最后的两个答案当中选出最大值即可。

2. 代码实现

给出python代码实现如下:

class Solution:def maximumSetSize(self, nums1: List[int], nums2: List[int]) -> int:n = len(nums1)cnt1 = Counter(nums1)cnt2 = Counter(nums2)set1 = set(nums1)set2 = set(nums2)s1 = sorted(set1, key=lambda x: cnt2[x])[:n//2]s2 = set2 - set(s1)ans1 = len(s1) + min(len(s2), n//2)s2 = sorted(set2, key=lambda x: cnt1[x])[:n//2]s1 = set1 - set(s2)ans2 = min(len(s1), n//2) + len(s2)return max(ans1, ans2)

提交代码评测得到:耗时604ms,占用内存29.8MB。

3. 算法优化

看了一下大佬们的解答,发现他们的思路更加直接一点,其实也是我最开始的思路,不过后来我想岔了,还以为会有特殊情况……

简单来说,就是分别从两个数组当中选出所有的只出现在一个数组当中的元素,然后拼接上剩余那些在两个数组当中都有出现的数组,拼接到最终的 n n n个元素即可。

给出python代码实现如下:

class Solution:def maximumSetSize(self, nums1: List[int], nums2: List[int]) -> int:N = len(nums1)nums1, nums2 = set(nums1), set(nums2)both = nums1 & nums2one = nums1 ^ bothtwo = nums2 ^ bothfrom_one = min(N//2, len(one))from_two = min(N//2, len(two))return min(from_one + from_two + len(both), N)

提交代码评测得到:耗时498ms,占用内存30MB。

这篇关于Leetcode 3002. Maximum Size of a Set After Removals的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582887

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已