| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> leetcode:1713.得到子序列的最少操作次数 -> 正文阅读 |
|
|
[数据结构与算法]leetcode:1713.得到子序列的最少操作次数 |
|
?solution1: ????????最开始的想法,递归,for循环target,如果arr里面没有则加1,如果有递归,两种情况。1、插入新的target为[1,3],新的arr为匹配到的位置后面的部分[9,4,1,2,3,4],这里还有一个细节,就是有可能arr有相同的数。2、不插入,加1,新的target[1,3],arr保持不变。然后对两种结果取最小值
很显然,空间复杂度和时间复杂度严重超标。 ?solution2: ? ? ? ? 看了一眼解析,哦,找最长公共子序列,那就动态规划,就去看了一眼动态规划的逻辑,直接暴力复现 ? ? ? ? 这块的关键是转换了思想,在arr里寻找包含的target里的元素以及对应的位置,我感觉我下次还是想不到。。。。
很显然还是超时。 ?solution3: ? ? ? ? 这时,target的特点就要突出了,递增序列,意味着寻找递增的子序列,那么第二层for循环就可以简化了,这个逻辑,pos里面的元素可以通过对比大小来进行删除,将for循环换成了while(这里用了二分法来插入)
?发现还是超时,,emmm,又看了一眼解析,发现一个for循环和第二个for循环完全可以合并啊,用了bisect.bisect_left二分查找的库,我寻思库能比我写的快点?然后又又又试了一下 ?solution4:
????????还是不行,还是超时,然后我把答案里面的c++版本拷进去提交了一下,是真的快,应该是python本身的局限性吧。看起来逻辑是一样的,行吧,思想最重要,就到这吧。 学了忘,忘了学,学了还得忘,忘了学,学了忘,忘了还得学。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/29 11:04:56- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |