【每日一题】【LeetCode】【第二十四天】【Python】两个数组的交集 II

news2025/1/18 6:41:31

解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

顺着“两个数组的交集”的思路想,先用集合处理nums1nums2,然后通过“交集”运算得出列表res,然后循环检查列表res,得出各个元素在两个数组中出现的最小次数,最终在列表plus中添上少的元素,借助python的列表相加,返回res+plus就是答案。

class Solution(object):
    def intersect(self, nums1, nums2):
        res = list(set(nums1) & set(nums2))
        plus = []
        for i in res:
            s = min(nums1.count(i), nums2.count(i))
            for j in range(s - 1):
                plus.append(i)
        return res + plus

测试正确,提交通过。不过,效率不高。

在这里插入图片描述

第二次

想一想如何优化。在进阶提示中,第一条就是有序的两个数组会怎么优化算法。

看了看评论区,有人在两个有序数组的基础上再用双指针法进行遍历(假设是p1p2两个指针,各自从nums1nums2开始找),如果相同p1p2一起+1,不相同时,哪边小了哪边+1,这样不但可以控制多次加入同样的元素,还保证了时间复杂度是O(m+n)。

按照这个思路我们来实现一下,转化成代码比较简单。

class Solution:
    def intersect(self, nums1, nums2):
        nums1.sort()
        nums2.sort()
        p1, p2 = 0, 0
        res = []
        while p1 < len(nums1) and p2 < len(nums2):
            if nums1[p1] == nums2[p2]:
                res.append(nums1[p1])
                p1 += 1
                p2 += 1
            else:
                if nums1[p1] < nums2[p2]:
                    p1 += 1
                else:
                    p2 += 1
        return res

测试正确,提交成功!

在这里插入图片描述

可以说,双指针法不一定局限于一个数据中使用。一个数组可以一前一后,然后夹住我们最终需要的结果;两个数组可以一个数组一个,从头到尾相互比对。

前面有题目也表示了双指针可以应用于有序数组也可以应用于无序,所以双指针法有灵活一点,针对需求,有时会有奇效。

杂谈

前面写很多题的时候,很多时候都看到了动态规划这个思想,不过试着用这个代码跑了跑,花费5512 ms时间。。。太慢了,思路也没怎么看懂,看看以后的题目能不能练一下吧。

"""动态规划"""
class Solution:
    def intersect(self, nums1, nums2):
        nums1 = sorted(nums1)
        nums2 = sorted(nums2)
        dp = [[[]] * (len(nums2)+1) for _ in range(len(nums1)+1)]
        for i in range(1, len(nums1)+1):
            for j in range(1, len(nums2)+1):
                if nums1[i-1] == nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + [nums1[i-1]]
                else:
                    dp[i][j] = max(dp[i][j-1], dp[i-1][j], key=len).copy()
        return dp[-1][-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022生化原理I复习资料汇总

文章目录1.2022复习重点及参考题2022年考试复习题&#xff1a;附录&#xff1a;参考答案及复习重点2.2021复习重点及参考题3.往年复习重点及参考题汇总4.复习重点整理及考试题型生化原理I复习资料及往年考题1.2022复习重点及参考题 2022年考试复习题&#xff1a; 1.2021-2022…

Python Stock安装与使用

这个是使用python 开发股票系统。 使用 tushare 获取股票数据&#xff0c;然后使用tornado 进行web 展示。 使用pandas numpy 数据处理。 项目代码 项目代码放到github上面 GitHub - pythonstock/stock: stock&#xff0c;股票系统。使用python进行开发。 因为为了简单&#x…

【Netty学习】七、详解ByteBuf缓冲区

七、详解ByteBuf缓冲区 为了确保引用计数不会混乱&#xff0c;在Netty的业务处理器开发过程中&#xff0c;应该坚持一个原则&#xff1a;retain和release方法应该结对使用。简单地说&#xff0c;在一个方法中&#xff0c;调用了retain&#xff0c;就应该调用一次release。 pub…

视图存储过程存储函数

文章目录视图常见数据库对象视图概述为什么使用视图&#xff1f;视图的理解创建视图创建单表视图创建多表联合视图基于视图创建视图查看视图更新视图的数据一般情况不可更新的视图修改、删除视图修改视图删除视图总结视图优点视图不足存储过程&存储函数存储过程概述理解分类…

NFT Insider #84:The Sandbox与华纳音乐集团合作举办全世界最大的DemoDrop,英超联赛签署NFT协议

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#…

[论文分享] How could Neural Networks understand Programs?

前言 读一篇 ICML 2021 的论文How could Neural Networks understand Programs? 程序语义理解是程序设计语言处理(PLP)的一个基本问题。最近基于NLP预训练技术学习代码表示的工作&#xff0c;推动了该方向的前沿。然而&#xff0c;PL和NL的语义有着本质的区别。忽略这些&…

CPP----精选常识100例

1 静态全局变量的作用域 本文件 2 判断一个程序是C还是C编译的 #ifdef __cpluspluscout << "c"; #else cout << "c"; #endif3 C函数传递方式 值传递&#xff0c;引用传递&#xff0c;指针传递 4 虚函数定义及用法 虚函数是C中用于实现多态(p…

vue2 a-tree-select树形结构-懒加载(无限子级)---笔记

实现效果 思维导图 HTML代码&#xff1a;treeData是绑定的数组&#xff0c;onLoadData是懒加载函数 <a-tree-select style"width: 100%; margin-left: 20px" tree-data-simple-mode multiplelabelInValueplaceholder"请选择…" v-decorator"[lea…

史上最详细的KMP算法教程,看这一篇就够了

&#x1f9d1;‍&#x1f4bb; 文章作者&#xff1a;Iareges &#x1f517; 博客主页&#xff1a;https://blog.csdn.net/raelum ⚠️ 转载请注明出处 目录一、BF算法二、KMP算法2.1 字符串基础2.2 next数组2.3 KMP的实现2.4 next数组的生成三、改进的KMP算法3.1 nextval数组3.…

turf.js实现行政区(多边形)图形合并边界提取,掩膜等效果

在做前端行政区展示的时候,可能经常会遇到这样的需求,就是给定一个行政区比如杭州市各个区,县的行政区边界图形,但是我们现在需要一个杭州市的行政区边界,我们是否可以通过前端合并这些行政区,答案当然是可以的,我们可以使用turf.js来实现这个需求。 turf官网:Turf.js…

纯滞后系统的数字Smith预估控制-2

在纯滞后系统的数字Smith预估控制-1的基础上进行Simulink仿真。采用 Simulink 进行数字化仿真&#xff0c;按Smith算法设计Simulink模块。在PI控制中&#xff0c;kp0.5&#xff0c;ki0.01。其响应结果如图1和图2所示。图1 Smith阶跃响应结果图2 只采用PI控制时的阶跃响应结果初…

CDA Level Ⅱ 模拟题(一)

单选1 练习题 【单选题】1/20 一项针对某城市小微企业税收扶持和税收种类的调查&#xff0c;本打算调查500个企业&#xff0c;但忽然发现税务中心数据库中已存有这项调查数据&#xff0c;并且可以有权限获取这份数据&#xff0c;请问这是什么类型的调查方式&#xff1f; A.分层…

flask计算pin码

Flask debug模式算pin码_Ys3ter的博客-CSDN博客_flask pin码 可以参考这个链接 ctfshow801 然后这张图非常的重要 也就是我们需要上面的各个因素&#xff0c;然后获得ping码&#xff0c;也就是console的密码&#xff0c;就可以自己输出命令 然后会有两个脚本&#xff0c;一个…

原神私服搭建教程(3.0本地版)

环境准备安装Java SE – 17 注意: 如果想仅运行服务端, 只下载 jre 即可MongoDB (推荐 4.0)代理程序: mitmproxy (仅需 mitmdump&#xff1b;推荐使用), Fiddler Classic 等校验win r &#xff0c;输入cmd 呼出控制台java&#xff1a;输入java -version 查看版本&#xff0c;正…

嵌入式Linux从入门到精通之第十二节:线程

线程类比于人得大脑,进程来实现具体操作 每个进程都拥有自己的数据段、代码段和堆栈段,这就造成进程在进行创建、切换、撤销操作时,需要较大的系统开销。 为了减少系统开销,从进程中演化出了线程。 线程存在于进程中,共享进程的资源。 线程是进程中的独立控制流,由…

【C++】C++ 入门(三)

目录 一、内联函数 1、前置知识 2、内联函数概念 3、内联函数特性 4、补充内容 4.1、宏的优缺点 4.2、C有哪些技术替代宏 二、auto关键字(C11) 1、概念 2、使用场景 3、使用细则 3.1、auto与指针和引用结合起来使用 3.2、 在同一行定义多个变量 3.3、auto不能作为…

Java安全基础(二)Servlet核心技术

因为在实习中&#xff0c;文章更新速度可能有点慢&#xff0c;初学JAVA安全&#xff0c;内容如有不恰当的地方&#xff0c;欢迎各位大佬指正。 今天写一下Servlet的一些核心技术&#xff0c;后面更新完Filter之后我会对这两个进行一个总结。 了解Servlet知识对后续的框架审计…

自媒体人绝对要知道的6款软件工具!免费文案、配音不在话下

NO.1丨喵盐配音&#xff08;小程序&#xff09; 喵盐配音&#xff0c;它是我近期使用次数较多的配音小程序。这是一款专注于文字转语音的智能语音合成小程序&#xff0c;不需要下载&#xff0c;v小橙序搜索在线使用。其拥有200多个抖音热门发音人&#xff0c;支持普通话、英语、…

更安全的ftp服务器Pure-FTP搭建(4)

实验简介 实验所属系列&#xff1a;Linux服务器搭建 实验对象&#xff1a; 本科/专科信息安全专业 相关课程及专业&#xff1a;计算机基础&#xff0c;计算机网络 实验时数&#xff08;学分&#xff09;&#xff1a;2学时 实验类别&#xff1a;实践类预备知识 本实验要求实验者…

【JVM】Java类加载机制详解

【JVM】Java类加载机制详解 文章目录【JVM】Java类加载机制详解一&#xff1a;类加载子系统1&#xff1a;类加载器子系统的作用2&#xff1a;加载器 ClassLoader 的角色二&#xff1a;类的加载过程1&#xff1a;加载阶段2&#xff1a;验证阶段&#xff1a;确保被加载的类的正确…