
LeetCode/竞赛/算法分析
文章平均质量分 73
记录leetcode及编程算法题,和一些竞赛经验分享
Briwisdom
这个作者很懒,什么都没留下…
展开
-
趣味玩游戏算法集锦:实现简单,找规律难!
算法的求解是存在套路的。有些题目大家一遍就看懂了,最后求解代码实现也很简单,一行两行就可以了。但是并不清楚为什么是这样的求解?如何在思考的过程找到规律呢?其实这个思考的过程,也是对问题进行梳理并抽象分析,归纳总结的重要体现。本篇将汇总这些有意思的算法题目。提供分析的过程,帮助大家在量级层面看待这类题目的求解规律。当面对一个新问题时候,能够透过现象看本质,快速解答。原创 2023-05-30 22:31:56 · 1088 阅读 · 0 评论 -
算法题:图的表示形式与遍历框架
图和多叉树最大的区别是,图是可能包含环的,你从图的某一个节点开始遍历,有可能走了一圈又回到这个节点,而树不会出现这种情况,从某个节点出发必然走到叶子节点,绝不可能回到它自身。加权有向图值的是,有向图中节点之间的连接加了权重值,比如在邻接矩阵中,matrix[i][j]不再是布尔值,而是一个int值,0表示无连接,其他值表示连接权重。(outdegree),比如上面的有向图中,节点3的出度为3(有3条边指向它),出度为1(有1条边指向别的节点)。其实就是「邻接表」表示的一幅图,,请你计算所有从节点。原创 2023-04-08 15:57:00 · 446 阅读 · 0 评论 -
算法题回顾:双指针链表系列集锦
如下示意图,首次相遇,slow走了k步, fast走了2k步,环的长度是k, 假设相遇节点离环的起点距离是n, 则从头节点到slow位置是k, 从头节点到环起点begin是k-n。判断环的起点:只需要在fast和slow相遇时候,将slow节点重新指向头节点,然后slow和fast指针开始同步前进,当再次相遇时候,即为环的起始节点。基本版本:遍历两遍链表,第一遍 知道链表的长度n,第二遍,倒数第k个节点,就是正数第n-k+1个节点,输出第n-k+1个节点。给一个链表数组,每个链表都是升序排列。原创 2023-04-07 00:13:26 · 755 阅读 · 0 评论 -
算法题回顾:二分查找
二分查找的常用场景: 寻找一个数、寻找左侧边界、寻找右侧边界。即给定一个有序数组arr, 查找是否存在数a;从左开始,首次出现a的位置;从右开始,第一次出现a的位置。太大,直接相加导致溢出的情况,编程时候一般使用前者。的结果相同,但是为了防止了。原创 2023-04-06 22:18:37 · 266 阅读 · 0 评论 -
由浅入深之字符串的算法题(vs: chatGPT做算法)
经典算法题目:合并两个有序数组,抛给chatGPT3.5是什么效果呢?它首先给出了一个最容易实现的思路,然后在两轮人工提醒下,不断优化,得到了我们上面所述的最优解。原创 2023-03-21 00:05:03 · 2102 阅读 · 0 评论 -
由浅入深之数组的算法题(vs: chatGPT做算法)
也就是说,如果要查找的数字不在数组的右上角,则每次在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找范围,直到要查找的数字被找到,或者查找范围为空。思路2是按照二分查找的想法,如果输入长度是n的数组,那么函数countRange将被调用O(logn)次,每次需要O(n)的时间,因此总的时间复杂度是O(nlogn),空间复杂度是O(1)。位置0,1,2,3都是各就其位了,遍历来到位置4,值为2,下标为2的地方已经有一个2了,所以发生了重复,找到了一个答案,退出程序。运行下面的代码,请问输出是什么?原创 2023-03-18 22:39:30 · 795 阅读 · 0 评论 -
opencv源码之中值滤波medianBlur_SortNet解读
中值滤波,顾名思义,指的是对窗口内的数取中值,作为滤波处理的结果。如果不考虑优化的实现思路,就是把窗口内所有元素进行排序,然后取中间的值,排序算法的时间复杂度最小的是nlog(n),也就是需要进行n*log(n)次比较,当n=9时候,对全部数据进行排序需要进行至少27次比较。这里,你肯定好奇,为什么B1,B2,B3是这样取A1,A2,A3的比较结果,C这样取B1,B2,B3的比较结果呢?B1汇聚了A1,A2,A3的最大值,B2汇聚了A1,A2,A3的中间值,B3汇聚了A1,A2,A3的最小值。原创 2023-01-07 00:26:43 · 2308 阅读 · 0 评论 -
LeetCode第317场周赛打卡
竞赛地址: 竞赛 - 力扣 (LeetCode)初始解答 简单题目,按照字面解答即可,无技巧。思路:判断是否可被2整除,再判断能否被3整除,如满足,则求和,最后返回满足条件的数的均值即可。优化解答可以将同时能被2,3整除,合并为能被6整除。 初始解答 中等难度题目,理解题目后,就是考虑如何降低时间复杂度。时间复杂度:O(n)思路:遍历一次数组creators,建立关于creatorer的字典结构,每位creatorer存储3个数:流行度之和,最高播放量,最高播放量对应的id。每次遍历时候,都会更新两个原创 2022-10-30 13:52:55 · 393 阅读 · 0 评论 -
理解KMP算法的实现流程
说起KMP算法,就不得不提BF算法。KMP是BF算法的优化。这里梳理一下自己的理解。KMP算法的难点就在于对Next数组的求解。原创 2022-10-08 00:40:44 · 339 阅读 · 0 评论 -
打卡记录编程成长/优快云编程竞赛(第6期)
之前经常在leetcode上刷编程题,水平的话,周赛4道题,在1.5h时间里基本可以完成3道。困难类型的题目刷的很少,计划先把简单和中等的慢慢刷完,总结一些经验,再冲刺难度高的题目吧。csdn的编程竞赛是第一次参加,4道题目,个人感觉偏容易,但是如果能在都完成的情况下,和小伙伴们比比速度,也还是有点挑战的。原创 2022-09-18 13:11:53 · 493 阅读 · 1 评论 -
图遍历问题:感染二叉树需要的总时间
给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同。另给你一个整数 start。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。2,从start节点开始,BFS思想,分别感染左,右,父节点,并实时更已感染的节点。3,BFS通过栈的形式,记录每次将要感染的节点。当栈为空,即感染了所有节点。返回感染整棵树需要的分钟数。1,求出每个节点对应的父节点。节点与一个已感染节点相邻。节点此前还没有感染。原创 2022-08-21 22:16:49 · 502 阅读 · 0 评论 -
拓扑排序之课程表问题 bfs, dfs 双解
这道题用 BFS 和 DFS 都可以完成,BFS 的写法很经典,BFS 的写法就叫「拓扑排序」,这里还用到了贪心算法的思想,贪的点是:当前让入度为 0 的那些结点入队。1)首先遍历得到每个节点的入度数,以及有向图的字典,即每个节点课程结束后,哪些课程可以继续执行的字典映射。指遍历节点的一条路径到底,由图的低部向上回溯,中间的节点通过栈的结构存储,先进后出即为所求答案。3)最后,建立队列的循环,每次出一个节点,知道所有入度为0的节点都出来了,队列为空退出循环,此时队列一次出来的节点顺序就是所求答案。...原创 2022-08-13 23:19:52 · 507 阅读 · 0 评论 -
python的dict结构比list还是快啊
timeout版本的代码,我是考虑让第一遍出来只保留与下标差相同的组合对数,就用appe存储某个下标差是否出现过,yes字典结构存储有2个及以上出现的次数。结果应该是每次list查询是否出现耽误了时间,导致代码timeout。刷一道中等难度题目,思路和别人的一样,结果我的判定timeout, 后来发现,是我使用的list查找耽误事啦!所以,后来丢弃了appe,直接用yes存储下标差出现的次数,这样通过了所有测试用例。...原创 2022-08-07 09:45:00 · 223 阅读 · 0 评论 -
双指针/滑动窗口问题
leetcode, 2302统计得分小于 K 的子数组数目原创 2022-07-31 23:04:51 · 192 阅读 · 0 评论 -
借助SortedContainers库的算法题timeout问题优化
后来参考别人的代码,建立index数组时候,都直接调用了sortedcontainers库里面的SortedList函数,基于摆脱python库函数的依赖,自己写了二分排序算法来维护index数组为有序数组,完美通过了。否则如果是无序的排分,如果调用highestRate函数时候,实时的求解,不管你实时求解算法写的多优美,我测试了,timeout是必然。刷了几道leetcode的算法题,其中用了这个库创建的列表,集合啥的,能通过大批量的超时测试任务。第二道是调用的sortedcontainers实现的。..原创 2022-07-24 16:40:10 · 339 阅读 · 0 评论 -
字典序-公司命名
("coffee","donuts")对应的公司名字是"doffeeconuts"。-("donuts","coffee")对应的公司名字是"conutsdoffee"。-("donuts","toffee")对应的公司名字是"tonutsdoffee"。-("toffee","donuts")对应的公司名字是"doffeetonuts"。输入ideas=["coffee","donuts","time","toffee"]...原创 2022-07-16 18:23:48 · 267 阅读 · 0 评论 -
字典序问题-字符串去重后字典序最小的子序列
题目给定一个全是小写字母的字符串str, 删除多余字符,使得每种字符只保留一个,并让最终结果的字符串的字典序最小举例str='acbc', 删掉第一个'c', 得到‘abc’,是所有结果字符串中字典序最小的。str='dbcacbca’, 删掉第一个‘b’, 'c', 第二个‘c’,'a', 得到‘dabc’是所有结果字符串中字典序最小的。题目理解:1)每种字符必须保留一个,2)使得保留字符串字典序最小,也就是多余的字符中删减先后顺序,以及开始位置选择的问题。解题思路:首先给所有字符进行词频统计;然后遍历.原创 2022-06-03 15:05:33 · 1706 阅读 · 4 评论 -
字典序问题:在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A 由26 个小写英文字母
题目1描述:在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1 次。例如,a,b,ab,bc,xyz 等字符串都是升序字符串。对于任意长度不超过16 的升序字符串,迅速计算出它在上述字典中的编码。编程任务:对于给定的长度不超过6 的升序字符串,编程计算出它在上述字典中的编码.输入描述:第一行是一个正整数,表示接下来共有N行,在接原创 2022-06-03 11:57:52 · 3483 阅读 · 0 评论 -
基于Morris遍历实现的二叉树先、中、后序遍历
Morris遍历一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1),通过利用原树中大量空闲指针的方式,达到节省空间的目的。morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度相比,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现空间开销的极限缩减。Morris遍历细节:假设来到当前节点cur,开原创 2022-04-25 21:42:41 · 583 阅读 · 0 评论 -
思路篇-递归与动态规划(4)
整体解题思路:题—>暴力递归写法(重复解)—>记忆化搜索(可变参数,不讲究组织)—>经典动态规划(精细化组织)当表中某个位置无枚举行为,记忆化搜索不用转为经典动态规划,因为时间复杂度相同。完整流程体检的题目1:给定一个无重复正整数的数组arr,表示单张纸币代码的面值数,以及一个目标数值aim,请问可以组成这个目标数值的方法数。暴力递归解法思路当使用 i 张arr[0]的货币,剩下的钱数用剩下的货币值可以有多少种方法,i 的范围从0知道 i *arr[0]≤aim原创 2022-03-20 18:27:07 · 636 阅读 · 0 评论 -
思路篇-递归与动态规划(3)
1,A,B玩家取纸牌牌,看获胜者分数的问题2,村里的人相互收发信的方案数3,N皇后问题的方案数原创 2022-03-16 00:51:07 · 549 阅读 · 0 评论 -
思路篇-递归与动态规划(2)
1,打印一个字符串的全部子序列2,打印一个字符串的全部子序列,要求不出现重复字面的子序列3,打印一个字符串的全部排列4,打印一个字符串的全部排列,要求不出现重复的排列子序列是指一个字符串从左到右,每个字符可以选择要或者不要,但是不能出现右边的字符在左边的前面的情况。题目1打印一个字符串的全部子序列思路:用ans列表记录每条路径形成的子序列,index表示当前到了字符串的第几个字符做选择,path表示该路径下已经形成的子序列。伪代码流程:fun_process(.原创 2022-03-13 15:17:19 · 2449 阅读 · 0 评论 -
思路篇-递归与动态规划(1)
1,汉诺塔问题有A,B,C 3个柱子可以串放圆盘,把N个圆盘从大到小叠放在左边柱子上,怎么移动把这N个圆盘按照从大到小叠放在右边的柱子上,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。思路:把大问题拆分成小问题:假设左边A杆的圆盘从上到下依次是1,2,3,...,N1,把1到N-1个圆盘从A杆移到到B杆2,把第N个圆盘从A杆移动到C杆3,把1到N-1个圆盘从B杆移到到C杆其中第1步又可以拆分成:1-1,把1到N-2个圆盘从A杆移动到C杆1-2,把第N原创 2022-03-12 20:41:42 · 526 阅读 · 0 评论 -
数据分析可视化利器的简单使用示例-——seaborn
seaborn是一个建立在matplot之上,可用于制作丰富和非常具有吸引力统计图形的Python库。Seaborn库旨在将可视化作为探索和理解数据的核心部分,有助于帮人们更近距离了解所研究的数据集。无论是在kaggle官网各项算法比赛中,还是互联网公司的实际业务数据挖掘场景中,都有它的身影。可视化所需的包与数据导入:import numpy as npimport pandas as...原创 2020-04-19 23:36:37 · 450 阅读 · 0 评论 -
入门级数据挖掘比赛——二手车交易价格预测
目录题目背景初期工作数据分析和特征选择模型选择总结最近参加了天池的一个入门级数据挖掘比赛:二手车交易预测。昨天比赛结束,从参赛到结束也就10天,正经投入时间大概有5天吧,虽然是入门级比赛,看起来是很简单的回归预测,但是想冲进前13名(前13名有奖励)还是非常不容易的。2746组中最终排名48,对比投入时间和所做的工作,这个名次也没啥好说的。现在结束了,排名在前的队伍应该最近...原创 2020-04-13 00:09:47 · 1412 阅读 · 2 评论 -
输出从小到大第n个丑数-空间换时间
题目: 我们把只包含因子2,3和5的数乘坐丑数(Ugly Nunber),求按从小到大的顺序的第1500个丑数。例如:6和8是丑数,但14不是丑数,因为它包含因子7。习惯上我们把1当作第一个丑数。常规方案:逐个判断每个整数是不是丑数丑数的定义是只能被2,3,5整除,所以一个整数如果能被2整除,就连续除以2;能被3整除,就连续除以3;能被5整除,就连续除以5。如果最后得到的是1,那么这个数就...原创 2020-03-10 18:24:02 · 494 阅读 · 0 评论 -
74. 搜索二维矩阵(python)
题目描述(中等)编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true...原创 2018-12-21 14:29:18 · 1038 阅读 · 0 评论 -
583. 两个字符串的删除操作(python)
题目描述(中等)给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例 1:输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"说明:给定单词的长度不超过500。 给定单词中的字符只含有小写字母。思路分析题原创 2018-12-19 23:13:24 · 668 阅读 · 0 评论 -
72. 编辑距离(python)
题目描述(困难)给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse...原创 2018-12-16 19:56:52 · 464 阅读 · 0 评论 -
73. 矩阵置零(python)
题目描述(中等)给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [...原创 2018-12-16 17:14:14 · 1559 阅读 · 0 评论 -
Weekly Contest 114
1675 / 3198,(1/5)目录953. 验证外星语词典题目描述(简单)代码954. 二倍数对数组题目描述代码955. 删列造序 ||题目描述代码956. 最高的广告牌(困难)题目描述代码953. 验证外星语词典题目描述(简单)某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的...原创 2018-12-09 15:51:03 · 247 阅读 · 0 评论 -
71. 简化路径(python)
题目描述(中等)给定一个文档 (Unix-style) 的完全路径,请进行路径简化。例如,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"边界情况:你是否考虑了 路径 = "/../" 的情况? 在这种情况下,你需返回 "/" 。 此外,路径中也可能包含多个斜杠 '/'原创 2018-12-06 19:53:11 · 760 阅读 · 0 评论 -
70. 爬楼梯(python)
题目描述(简单)假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 ...原创 2018-12-06 15:24:19 · 1638 阅读 · 0 评论 -
69. x 的平方根(python)
题目描述(简单)实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路分析本题难度低,使用二...原创 2018-12-06 14:57:41 · 441 阅读 · 0 评论 -
38. 报数(python)
题目描述(简单)报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1"原创 2018-12-06 14:31:50 · 677 阅读 · 0 评论 -
68. 文本左右对齐(python,C++)
题目描述(困难)给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多...原创 2018-12-05 13:15:59 · 956 阅读 · 1 评论 -
67. 二进制求和(python)
题目描述(简单)给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"思路分析对于这道题,我就是按照常规思路每一个位上的字符进行求和。首先判断 a 和 b 的长度是否原创 2018-12-03 19:11:03 · 914 阅读 · 0 评论 -
66. 加一(python)
题目描述(简单)给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 432...原创 2018-12-03 18:08:14 · 554 阅读 · 0 评论 -
65. 有效数字(python)
题目描述(困难)验证给定的字符串是否为数字。例如:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。思路分析这道题应该难在考虑各种情况。所有的字符可以分原创 2018-12-03 17:47:56 · 2571 阅读 · 0 评论 -
63. 不同路径 II(python)
题目描述(中等)一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:...原创 2018-12-03 15:28:35 · 535 阅读 · 0 评论