程序算法学习笔记
海晨威
Growth is a song
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
判断质数/素数——我知道的最快的方法
标准版:大部分人都知道的比较快的方法:判断从2到sqrt(n)是否存在其约数,时间复杂度O(sqrt(n))高配版:判断2之后,就可以判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数,时间复杂度O(sqrt(n)/2)尊享版:首先看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;证明:令x≥1,将大于等于5的自然数......原创 2017-12-01 20:23:32 · 75883 阅读 · 31 评论 -
Python两行实现斐波那契数列及动态规划改进
递归斐波那契数列本质可以看作一个递归,即:Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)因此有:#递归版Python代码def Fibonacci(n): return n if n < 2 else Fibonacci(n-1)+Fibonacci(n-2)递归代码简单明了,但时间和空间复杂度都较高,尤其是在n较大的情况下...原创 2018-05-11 16:30:37 · 2161 阅读 · 0 评论 -
二分查找的循环和递归Python实现
二分查找的前提是数组或列表有序,下面以升序列表为例,key为要查找的关键字,查找成功返回下标,不成功返回None,给出循环和递归实现。循环实现:def HalfSearch(OrderedList, key, left, right): while left &amp;amp;lt;= right: mid = (left + right) // 2 if ke...原创 2018-05-11 16:47:01 · 4091 阅读 · 4 评论 -
n个矩形的重叠面积问题及其变种-python实现
问题:平面上有n个平行于坐标轴的矩形,他们总的覆盖面积是多少?重叠的面积只算一次最佳参考:https://blog.youkuaiyun.com/u013480600/article/details/39503023上面参考博客的讲解非常好,就是有点小错误,改正后的思路如下:假设输入的矩阵中共有num1个不同的x坐标和num2个不同的y坐标,那么整个二维平面就被分割成了(num1-1)*(num2-...原创 2020-07-11 20:44:25 · 5836 阅读 · 5 评论 -
算法思想中的两点法和滑动窗口法及python实例
两点法(Two Pointer Approach),也就是双指针法,它一般可以把复杂度从穷举法的O(n^2)减小到O(n)两点法非常有用,很多问题都可以用,如快慢指针,还有求排序数组中的两数和问题两点法对应了两个指针,左右指针之间也就是一个窗口,当左右指针变化时,也就对应着窗口的滑动。所以实际上滑动窗口法是属于两点法的。滑动窗口法(Sliding Window)一般是通过左右指针的变化使窗口...原创 2019-03-10 15:04:37 · 6804 阅读 · 1 评论 -
背包问题-三种动态规划解法-逐步减少空间复杂度
题目描述:有编号分别为1,2,3,4,5的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?背包问题是典型的动态规划问题,也有一定的规律可循,通常采用自底向上的方式,先解决小问题,并存储,再解决大问题。方法一:时间空间都为O(n^2)的解法,但可以得到最大价值情况下拿了哪些东西这里dp[i]...原创 2019-07-05 23:24:44 · 5431 阅读 · 2 评论 -
两种方式判断有向图是否有环-python实现
两种方式判断有向图是否有环-python实现1. DFS判断有向图是否有环假设图以邻接矩阵表示,一条深度遍历路线中如果有结点被第二次访问到,那么有环。我们用一个变量来标记某结点的访问状态(未访问,访问过,其后结点都被访问过),然后判断每一个结点的深度遍历路线即可。def dfs(G,i,color): r = len(G) color[i] = -1 have_cir...原创 2019-09-27 20:41:13 · 15686 阅读 · 5 评论 -
两个栈实现队列和两个队列实现栈-Python实现-复杂度分析
两个栈实现一个队列入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的元素pop出来并push进栈B,再将栈B的第一个元素pop出栈,如不为空则直接从栈B中pop第一个元素出栈分析:这样做入队的复杂度为O(1),出队的复杂度则变为O(n)。而直接用python的list实现队列,以list尾为队列首,则入队用insert,复杂度为O(n),出队用pop,复杂度为O(1)。cl...原创 2018-02-10 14:09:11 · 1965 阅读 · 0 评论
分享