首页 > 其他分享 >350. 两个数组的交集 II

350. 两个数组的交集 II

时间:2023-07-01 19:59:34浏览次数:36  
标签:交集 res dd List II int 350 nums1 nums2

难度简单

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

 

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

 

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

 

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小,哪种方法更优?
  • 如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

 

 

map

from collections import defaultdict
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        if len(nums1) < len(nums2):
            return self.intersect(nums2,nums1)
        dd = defaultdict(int)
        for n in nums2:
            dd[n]+=1
        
        res = []
        for n in nums1:
            if n in dd and dd[n]>0:
                res.append(n)
                dd[n]-=1
        return res
                

 

 

排序+双指针

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1 = sorted(nums1)
        nums2 = sorted(nums2)
        i = 0
        j = 0
        res = []
        while i < len(nums1) and j < len(nums2):
            if nums1[i] == nums2[j]:
                res.append(nums1[i])
                i+=1
                j+=1
            elif nums1[i] > nums2[j]:
                j+=1
            elif nums1[i] < nums2[j]:
                i+=1
        return res

 

标签:交集,res,dd,List,II,int,350,nums1,nums2
From: https://www.cnblogs.com/zle1992/p/17519794.html

相关文章

  • 数组的隐式交集
    问题:在另一个表中引用“=轮休!$B$2:$G$5="休"”结果却不正确解决:公式本身没有问题,但是在输入的时候,组合键不应使用<Ctrl+Enter>,而是<Ctrl+Shift+Enter>,三键的结果才是数组。补充:<Ctrl+Enter>相当于复制,是在单元格中批量录入相同内容的组合键。此处使用了绝对引用,理论上......
  • 动态规划 Part II
    大家好,我是wangmy。众所周知动态规划将原问题分解成若干个子问题,再把子问题分解成若干更多子问题。先求解子问题,再从这些子问题的解得到原问题的解。今天我给大家分享一下动态规划的几道题和参考代码。砝码秤重题目描述(Description)设有n种砝码,第k种砝码有Ck个,每个重量均为Wk,......
  • LeetCode 142. 环形链表 II
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*detectCycle(ListNode*head){if(!head)return......
  • 代码随想录算法训练营第二十一天| 216.组合总和III 17.电话号码的字母组合
    216.组合总和III  思路:很像上一个组合类型的题目,唯一不同的就是自己写一个sum代码:1voidconvertBST_cur(TreeNode*root,vector<TreeNode*>&nodes)2{3if(!root)return;4if(root->left)convertBST_cur(root->left,nodes);5nodes.push_bac......
  • ASCII 码表
    ASCII码表本质上就是二进制数据与字符的编码映射。......
  • 602. 好友申请 II :谁有最多的好友
    602.好友申请II:谁有最多的好友SQL架构在Facebook或者Twitter这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请。RequestAccepted表:+----------------+---------+|ColumnName|Type|+----------------+---------+|requester_id|int......
  • iis部署.netcore项目不允许put 和post,delete请求
    在webconfig中添加红色标记部分<?xmlversion="1.0"encoding="utf-8"?><configuration><system.webServer><modulesrunAllManagedModulesForAllRequests="true"><removename="WebDAVModule"/></......
  • IIS上Put操作出现HTTP Error 405.0 - Method Not Allowed 解决方法
    WebDAV是超文本传输协议(HTTP)的一组扩展,为Internet上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝、移动、删除等。在IIS7.0中,WebDAV是作为独立扩展模块,需要单独进行下载,而IIS7.5以及以上版本中......
  • leetcode -- Subsets I &II-- 重点,求0,1序列
    Subsetshttps://leetcode.com/problems/subsets/思路1这里其实就是把Combination拿到题目的思路2,收集那种组合树所有root到其余节点(不包括root本身)path。classSolution:#@paramS,alistofinteger#@returnalistoflistsofintegerdefsubsets(self,S):......
  • 树状输出II
    题目:带节点输出问题描述给出二叉树的先序遍历输出(空结点用'.')表示,请构造二叉树,并输出二叉树的广义表表示。此广义表中每个结点均带有一个整数,这个整数表示对应的子树上结点总数。输入一行仅由‘.’与大小写字符构成的字符串,该字符串表示二叉树的先序遍历输出。其中'.'......