leetcode: explore-array-26 列表取交集 II
时间:2022-07-23
本文章向大家介绍leetcode: explore-array-26 列表取交集 II,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
leetcode explore 初级算法第六题。原题链接:
https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/26/
题目分析
因为题目不是很长,这里把题目贴出来:
Given two arrays, write a function to compute their intersection.
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Note:
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
Follow up:
What if the given array is already sorted? How would you optimize your algorithm?
What if nums1's size is small compared to nums2's size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
题目意思,敲重点: 1、找出两个列表里重复的元素 2、不仅仅是取交集这么简单,注意 Note 里的那句话:
Each element in the result should appear as many times as it shows in both arrays.
即交集的定义是只要元素出现,但结果里需要展示出现次数最少的。比如 nums1 = [1,2,2,1], nums2 = [2,2] 按题意取交集,如果正常按数学思维取交集结果应该是 [2],但题目意思是次数也要算在内,所以答案是 [2, 2]。
因此,整个题目应该是数字 + 出现次数一起取交集。答案不限制数字顺序。
参考答案
因为题目并没有对空间条件有什么限制,所以我们可以引入中间的一些 list 或者 dict 来存储中间结果。很容易想到用 dict,key 为数字,值为出现次数,然后如果两个 dict 里均有此数字,则取最小的次数做为当前数字的交集结果。
参考代码如下:
from collections import defaultdict
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
# 转为字典,key 为数字,value 为次数
d1 = defaultdict(int)
for n in nums1:
d1[n] += 1
d2 = defaultdict(int)
for n in nums2:
d2[n] += 1
result = []
for n, v in d1.items():
result.extend([n] * min(v, d2[n]))
return result
这里有一个小的知识点,也算是代码比较优雅的写法,即用到了 defaultdict。它的用法很简单,通常我们在申明一个普通的 dict 时,如果 key 不存在,通过 dict[key] 的形式会报错,只能通过 dict.get(key) 的返回是否为 None 来判断是否存在 key (或者通过 in)。即:
d1 = defaultdict(int)
for n in nums1:
d1[n] += 1
# 等价于:
d1 = {}
for n in nums1:
if d1.get(n):
d1[n] += 1
else:
d1[n] = 1
- 顶象全场景IoT安全方案解决物联网两大难题
- 诡异的【session丢失】和【<img src="">标签】
- TensorFlow核心使用要点
- “搜一搜”直达生活服务 微信连接移动消费新场景
- Linux服务器安全登录设置记录
- Linux系统下的ssh使用(依据个人经验总结)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- 深度解析 TypeConverter & TypeConverterAttribute (一)
- 从MapX到MapXtreme2004[7]-对Table、Feature等的理解
- 互联网赋能传统装企 “科技撬动力巨大”
- Python接口自动化-8-测试报告
- http应用优化和加速说明-负载均衡
- linux负载均衡总结性说明(四层负载/七层负载)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法