
算法
疯琴
这个作者很懒,什么都没留下…
展开
-
时间复杂度更低程序执行却更慢?
昨天做一道算法题,发现时间复杂度更低的算法程序执行却更慢。在分析的过程中我对于程序和算法的性能有了更加深入的理解。下文仅限于Go语言实现,提交是在英文 leetcode 网站,与中文网站结果不同,不知道测算的方式有没有差别。leetcode 239题 - 数据的滑动窗口最大值我只想到了暴力解法,每次滑动丢弃和新加入值以后判断窗口内的最大值,时间复杂度是O((n-k+1)*k)。官方推荐使用双端队列来实现线性时间复杂度,我在 小浩算法 看到他用暴力解法的结果性能不好。然而我用双端队列AC以后看最快的答案原创 2020-08-16 11:08:32 · 985 阅读 · 0 评论 -
792. Number of Matching Subsequences
最近开始同时使用python和go做题,go的效率高很多,用python brute force的方法提交以后TLE,同样的方法用go可以AC,用python可以榨取更快的算法。题目给定一个字符串S和一个单词列表words,找到words里所有S的子串。Example :Input:S = “abcde”words = [“a”, “bb”, “acd”, “ace”]Outpu...原创 2019-01-06 09:33:14 · 243 阅读 · 0 评论 -
leetcode 37. Sudoku Solver 数独
思路这是第一个自己解出来的Hard。用N皇后的递归思路,扫每一个空格,遍历1-9看可以放哪个数字,如果都不能放就清理现场回到上一层递归继续遍历。后来参考别人的思路,模拟人解题,先找出每个位置可以填的候选数,按照可填候选数的数目排序,从最少的开始填,这样剪枝掉一些不必要的计算。代码class Solution: def isValidPosition(self, n, row, col...原创 2018-12-09 16:26:34 · 181 阅读 · 0 评论 -
leetcode 79. Word Search
思路DFS,由于有比较变态的测试用例,所以要特别注意剪枝,一旦搜到结果之后,在返回的时候尽快往递归和循环外面跳。注意代码里注释的地方,都是能加速的地方。代码class Solution: def exist(self, board, word): """ :type board: List[List[str]] :type word: ...原创 2018-12-13 09:29:32 · 154 阅读 · 0 评论 -
leetcode 22. Generate Parentheses
题目给定n对括号, 写一个函数生成所有正确组合形式的括号对。思路数学归纳法递归,n==1时是[’()’],然后针对1以后的第n层,就是将n-1层的每一个元素的每一个位置加一对括号生成一个新元素,这些元素加起来构成第n层的结果。代码class Solution: def generateParenthesis(self, n): """ :type ...原创 2018-12-01 21:51:19 · 169 阅读 · 0 评论 -
leetcode 51. N-Queens
之前写的8皇后蠢爆了,学习了一下,从新写,对递归认识进步一点。class Solution: def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ result = [] board = [-1 for ..原创 2018-12-04 20:49:28 · 253 阅读 · 0 评论 -
leetcode 236. Lowest Common Ancestor of a Binary Tree
题目给定一棵二叉树,找到给定的两个结点的最低共同祖先(LCA)。思路宽度优先搜索二叉树,使用一个字典parent记录每一对父子关系,设置早停标志flag,找到两个目标结点后就停止。然后通过父子关系字典构建一个列表list1一个集合set2,list1是其中一个结点到根节点的路径,是有顺序的,set2是另一个结点到根节点的路径包含的结点。逐个遍历list1,如果当前元素在set2中,该元素就是...原创 2018-11-27 14:11:10 · 156 阅读 · 0 评论 -
leetcode 402. Remove K Digits
题目给定一个用字符串表示的非负整数num,从这个整数中去掉k个数字,使得到的数字最小。思路暴扫,组合出剩余位数的全都可能的数字,逐个插入堆中,最后取出堆顶元素,TLE思考发现从左到右逐个扫描数字,如果后一个数字小于等于前一个数字,就把前一个数字去掉,得到的就是去掉一个数字以后的最小数字,依此类推,直到扫到最后一个数字,这时整个数字是按位数字从小到大排列的,如果此时去掉的数字不足k个,就从...原创 2018-11-25 17:52:31 · 223 阅读 · 0 评论 -
leetcode 300.Longest Increasing Subsequence 最长递增子序列 动态规划
题目给定一个未排序的整数数组,找到最长递增子序列的长度。思路动态规划,使用一个数组dp记录原数组每一个位置的数字和到这个位置为止的最长子序列长度,dp数组元素是元组——(a:当前位置最长子序列长度,b:当前位置数字),遍历数组,每遍历到一个数字i,找到dp数组里面b小于i的全部元组里面最大的a记为x,向dp数组追加一个元组(x+1, i),这样dp数组里面记录了原数组截至至每一个位置的最...原创 2018-11-14 17:38:42 · 235 阅读 · 0 评论 -
leetcode 53. Maximum Subarray 最大子数组 分治算法
题目给定一个整数数组,找出和最大的连续子数组(至少包含一个元素)并返回最大和。尝试使用分治算法实现思路参考了《算法导论》里关于分治的讲解,正好就是这个题目,不过它的方法比较细致,把最大子数组的位置也求出来了。这道题只要求最大和,我简化了一下。思路是把数组从中间分成两部分,最大子数组要么是左半部分,要么是右半部分,要么是跨越中点,包含左右两个部分。递归比较各层的这三个部分的最大子数组和。...原创 2018-11-11 21:05:11 · 233 阅读 · 0 评论 -
leetcode 938. Range Sum of BST
题目给定一颗二叉搜索树的根节点,返回节点值在L和R之间(包括L和R)的节点值的和。思路写了一个完整的二叉搜索树,调整一下中序遍历的方法比较L和R就行了,注意在递归调用时要写上L和R这两个参数。如果是没有重复数字的BST,可以在递归查找左叶子之后比较一下R和右叶子的值,如果完全相等就早停,速度快了一倍。代码# Definition for a binary tree node.# c...原创 2018-11-12 22:07:28 · 608 阅读 · 0 评论 -
leetcode 822. Card Flipping Game 翻牌游戏
题目桌上有N张牌,正反面各有一个正整数(正反面的数可能不同)。我们翻任意数量的牌,然后选一张牌。如果选择的这张牌背面的数字X不在桌面上的牌的数字里,X就是好数。问最小的好数是几,如果没有,就返回0。fronts[i] 和 backs[i] 代表桌面上第i张牌的正面和反面数字。一次翻牌调换牌的正反面数字,翻完以后原来冲上的数字到了下面,原来冲下的数字到了上面。示例:Input: f...原创 2018-11-03 16:02:59 · 559 阅读 · 0 评论 -
leetcode 914. X of a Kind in a Deck of Cards
题目一摞牌,每张牌上写了一个整数,如果能找到一个大于等于2的数X,把牌分成1或多组满足下列条件:每组有X张牌每组里的每张牌上写得数字都是一样的Example 1:Input: [1,2,3,4,4,3,2,1]Output: trueExplanation: Possible partition [1,1],[2,2],[3,3],[4,4]Example 2:Input:...原创 2018-11-03 15:48:54 · 417 阅读 · 0 评论 -
leetcode 927.threeEqualParts 三等分
leetcode 927.threeEqualPartsclass Solution: def threeEqualParts(self, A): """ :type A: List[int] :rtype: List[int] """ A = [str(a) fo原创 2018-10-25 17:57:07 · 271 阅读 · 0 评论 -
python多进程逐对比较文档相似度+均分比较次数
多进程提高运算效率最近用python做数据处理,363个文件逐对比较相似度,总共65703次。之前学习神经网络发现cpu使用率只有30%多,应该是只用了一核,这次计算密集型任务,用多进程跑下看看提速效果。先把分析对象拆成多份,让每份的数量基本均匀,然后多线程跑,风扇果然嗡嗡起来了。下面是一个小样本量的测试结果,由于每次比对的计算量不同,所以效率不会是线性提升,我做了一个计算量相同的测试,效率也...原创 2018-06-06 21:31:56 · 832 阅读 · 2 评论 -
python解八皇后问题(二)——递归栈溢出
借着 python解八皇后问题(一) 研究一下栈溢出问题。pycharm里栈溢出报错是: Process finished with exit code -1073741571 (0xC00000FD)linux栈溢出报错是: Segmentation fault (core dumped)改造了一下函数:def eight_quene(x=0, y=0)...原创 2018-04-20 18:26:11 · 2103 阅读 · 0 评论 -
python解八皇后问题(一)
八皇后问题描述国际象棋8*8棋盘,64个位置,放8个皇后,皇后可以横竖斜线吃子,因此每个皇后所在的行、列和斜线都不能放皇后。小于5*5的棋盘无法每行放一个皇后,因此从五皇后以上可解N皇后问题。程序函数功能描述8*8棋盘用二位数据表示,初始全部为0,落子的位置改为1.allow_luozi函数判断某个位置是否可以落子,对于一个待判断的位置(x, y),如果以下位置都没有皇后,...原创 2018-04-19 21:52:56 · 2021 阅读 · 0 评论