每天都要刷算法
文章平均质量分 50
一个学数学的程序媛
要美要酷的学生党一枚
展开
-
数位dp-递推迭代和记忆搜索法dfs
当然上述和下图说明的都是遍历与4368同数位的数(即4位数的数),若还需找到4368小于四位数的则直接从第二高位开始1-9及后面都没有限制即可。①其中前两维的含义一般dp[i][j]表示:i位数其中最高位为j(eg.i=3,j=3,则300-399之间)的(满足某个条件)的数的个数。首先,如果是dfs暴力搜索,显然这道题目也可以解决,但时间复杂度会高很多,因为多了很多不必要的计算,以1举例,则代码如下。即此时第二高位只能取0-3,当第二高位取0-2时,后面两个数位取啥都可以,当第二高位取3时,原创 2024-04-05 22:18:36 · 492 阅读 · 1 评论 -
[超详细]3种方法判断一个数是否为质数(Python)
(分别针对6x-1和6x+1的,i从5开始即每次取i时就是在判断6x-1(x>=1),取i+2时就是在判断6x+1(x>=1)),即t%i ==0 or t%(i+2) ==0,一旦有能被整除的就是False。对于任一个自然数t,只要t>=5, 则可以写成6x-1,6x,6x+1,6x+2,6x+3,6x+4,...(x>=1)中的任一个。t=6x-1或者t=6x+1(x>=1),可是这个是t,又不是t的因数。因此,对于t>=5,只有t可以写成t=6x-1或者t=6x+1(x>=1)时。原创 2024-03-29 11:39:43 · 5770 阅读 · 3 评论 -
字节经典面试题--找小于n的最大数
这里是python版本,并将limit转成字符串利用index下标索引提取。总体而言肯定是上述方法是更优的,但是转成字符串处理方便些,面试应该也十分足够了。最后面再赋一个暴力解法(回溯暴力法)。【如果发现代码任何问题 十分欢迎评论区交流】视频是C++版本,且用offset直接提取int的每位数。贪心 + 二分,终于被我啃下来了。原创 2023-12-25 11:43:36 · 792 阅读 · 6 评论 -
Python三种方法实现topk问题(源码)
2. 第一次优化:首先根据n数组建立一个大顶堆 每次获取arr[0](并将其移除) 原地移除的方法是将arr[0]与arr[-1]对调 后在arr[0:-1)时向下调整法 反复上述步骤 直至k次 则获得了前k个最大的数 ------时复为O(n + klog_2n) 前一个n是建堆的时复,后面是进行了k次向下调整法,这样则当n很大时 log_2n趋于稳定 此时为线性复杂度O(n)时复最差为O(k+(n-k)log_2n)前面是k个堆的排序 后面是最糟糕的情况 即后面每次都要调整。原创 2023-12-12 21:51:43 · 380 阅读 · 0 评论 -
Python手撕kmeans源码
【代码】Python手撕kmeans源码。原创 2023-12-12 17:06:43 · 85 阅读 · 0 评论 -
leetcode415拓展字符串相加(带符号)
【代码】leetcode415拓展字符串相加(带符号)原创 2023-11-19 12:03:16 · 164 阅读 · 0 评论 -
python对数组的快排 加注释
【代码】python对数组的快排 加注释。原创 2023-11-10 16:27:58 · 79 阅读 · 0 评论 -
python不调用heapq库 实现大顶堆,小顶堆
参考了博客,并对其进行了堆的push() 和 降序排序的补充。原创 2023-10-28 16:50:24 · 213 阅读 · 0 评论