java判断三个数字范围是否有交集_Python学习教程:(初级算法)取交集

Python学习教程:(初级算法)取交集

题目分析

因为题目不是很长,这里把题目贴出来:

4d578c96f543e7afce5f2c5efd6b113f.png

题目意思,敲重点:

1、找出两个列表里重复的元素
2、不仅仅是取交集这么简单,注意 Note 里的那句话:

即交集的定义是只要元素出现,但结果里需要展示出现次数最少的。比如 nums1 = [1,2,2,1], nums2 = [2,2] 按题意取交集,如果正常按数学思维取交集结果应该是 [2],但题目意思是次数也要算在内,所以答案是 [2, 2]。

因此,整个题目应该是数字 + 出现次数一起取交集。答案不限制数字顺序。

参考答案

因为题目并没有对空间条件有什么限制,所以我们可以引入中间的一些 list 或者 dict 来存储中间结果。很容易想到用 dict,key 为数字,值为出现次数,然后如果两个 dict 里均有此数字,则取最小的次数做为当前数字的交集结果。

参考代码如下:

这里有一个小的知识点,也算是代码比较优雅的写法,即用到了 defaultdict。它的用法很简单,通常我们在申明一个普通的 dict 时,如果 key 不存在,通过 dict[key] 的形式会报错,只能通过 dict.get(key) 的返回是否为 None 来判断是否存在 key (或者通过 in)。即:


不知道伙伴们是否能懂,不清楚的可以留言,更多的Python学习教程也会继续为大家更新!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值