Leetcode 3002. 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 & nums2
        one = nums1 ^ both
        two = nums2 ^ both
        from_one = min(N//2, len(one))
        from_two = min(N//2, len(two))
        return min(from_one + from_two + len(both), N)

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

相关推荐

  1. Leetcode 3002. Maximum Size of a Set After Removals

    2024-01-08 18:28:02       63 阅读
  2. LeetCode 300 最长递增子序列

    2024-01-08 18:28:02       61 阅读
  3. Leetcode 300 最长递增子序列

    2024-01-08 18:28:02       55 阅读
  4. LeetCode-300.最长递增子序列】

    2024-01-08 18:28:02       39 阅读
  5. LeetCode 300. 最长递增子序列

    2024-01-08 18:28:02       39 阅读
  6. leetcode300:最长递增子序列

    2024-01-08 18:28:02       27 阅读
  7. Leetcode 3012. Minimize Length of Array Using Operations

    2024-01-08 18:28:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-08 18:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-08 18:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-08 18:28:02       87 阅读
  4. Python语言-面向对象

    2024-01-08 18:28:02       96 阅读

热门阅读

  1. 信息学奥赛一本通:装箱问题

    2024-01-08 18:28:02       59 阅读
  2. TensorRT 自学笔记001 基础知识点和学习资源

    2024-01-08 18:28:02       66 阅读
  3. Android简单控件

    2024-01-08 18:28:02       48 阅读
  4. gunicorn基本使用

    2024-01-08 18:28:02       68 阅读
  5. golang如何生成csv文件

    2024-01-08 18:28:02       57 阅读
  6. Gin框架的数据校验

    2024-01-08 18:28:02       57 阅读
  7. 设计模式之开闭原则

    2024-01-08 18:28:02       62 阅读
  8. 数据库有哪些新方向?

    2024-01-08 18:28:02       75 阅读