LeetCode/竞赛/算法分析
文章平均质量分 73
记录leetcode及编程算法题,和一些竞赛经验分享
Briwisdom
这个作者很懒,什么都没留下…
展开
-
数据分析可视化利器的简单使用示例-——seaborn
seaborn是一个建立在matplot之上,可用于制作丰富和非常具有吸引力统计图形的Python库。Seaborn库旨在将可视化作为探索和理解数据的核心部分,有助于帮人们更近距离了解所研究的数据集。无论是在kaggle官网各项算法比赛中,还是互联网公司的实际业务数据挖掘场景中,都有它的身影。可视化所需的包与数据导入:import numpy as npimport pandas as...原创 2020-04-19 23:36:37 · 397 阅读 · 0 评论 -
数学建模竞赛经验分享(从本科生到研究生,获奖成功率100%,我从数模所学)
前言博主本科是数学专业,研究生读的是计算机专业,其中参加了本科生的全国大学生数学建模竞赛和研究生数学建模竞赛共三次。本科参加一次(2014年)取得了大学生数学建模竞赛国家二等奖(国家奖只有一、二等奖);研究生参加两次:2017年得到了国家三等奖(研究生国家奖有一、二、三等),2018年今天刚刚发布初审结果,我们组获得了国家二等奖。竞赛结果一次比一次进步,三次作为队长的我此刻是无比激动,同时也深...原创 2018-11-11 15:20:07 · 87970 阅读 · 53 评论 -
入门级数据挖掘比赛——二手车交易价格预测
目录题目背景初期工作数据分析和特征选择模型选择总结最近参加了天池的一个入门级数据挖掘比赛:二手车交易预测。昨天比赛结束,从参赛到结束也就10天,正经投入时间大概有5天吧,虽然是入门级比赛,看起来是很简单的回归预测,但是想冲进前13名(前13名有奖励)还是非常不容易的。2746组中最终排名48,对比投入时间和所做的工作,这个名次也没啥好说的。现在结束了,排名在前的队伍应该最近...原创 2020-04-13 00:09:47 · 1206 阅读 · 2 评论 -
趣味玩游戏算法集锦:实现简单,找规律难!
算法的求解是存在套路的。有些题目大家一遍就看懂了,最后求解代码实现也很简单,一行两行就可以了。但是并不清楚为什么是这样的求解?如何在思考的过程找到规律呢?其实这个思考的过程,也是对问题进行梳理并抽象分析,归纳总结的重要体现。本篇将汇总这些有意思的算法题目。提供分析的过程,帮助大家在量级层面看待这类题目的求解规律。当面对一个新问题时候,能够透过现象看本质,快速解答。原创 2023-05-30 22:31:56 · 859 阅读 · 0 评论 -
算法题回顾:二分查找
二分查找的常用场景: 寻找一个数、寻找左侧边界、寻找右侧边界。即给定一个有序数组arr, 查找是否存在数a;从左开始,首次出现a的位置;从右开始,第一次出现a的位置。太大,直接相加导致溢出的情况,编程时候一般使用前者。的结果相同,但是为了防止了。原创 2023-04-06 22:18:37 · 220 阅读 · 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 · 570 阅读 · 0 评论 -
算法题:图的表示形式与遍历框架
图和多叉树最大的区别是,图是可能包含环的,你从图的某一个节点开始遍历,有可能走了一圈又回到这个节点,而树不会出现这种情况,从某个节点出发必然走到叶子节点,绝不可能回到它自身。加权有向图值的是,有向图中节点之间的连接加了权重值,比如在邻接矩阵中,matrix[i][j]不再是布尔值,而是一个int值,0表示无连接,其他值表示连接权重。(outdegree),比如上面的有向图中,节点3的出度为3(有3条边指向它),出度为1(有1条边指向别的节点)。其实就是「邻接表」表示的一幅图,,请你计算所有从节点。原创 2023-04-08 15:57:00 · 381 阅读 · 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 · 718 阅读 · 0 评论 -
由浅入深之字符串的算法题(vs: chatGPT做算法)
经典算法题目:合并两个有序数组,抛给chatGPT3.5是什么效果呢?它首先给出了一个最容易实现的思路,然后在两轮人工提醒下,不断优化,得到了我们上面所述的最优解。原创 2023-03-21 00:05:03 · 2015 阅读 · 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 · 1764 阅读 · 0 评论 -
LeetCode第317场周赛打卡
竞赛地址: 竞赛 - 力扣 (LeetCode)初始解答 简单题目,按照字面解答即可,无技巧。思路:判断是否可被2整除,再判断能否被3整除,如满足,则求和,最后返回满足条件的数的均值即可。优化解答可以将同时能被2,3整除,合并为能被6整除。 初始解答 中等难度题目,理解题目后,就是考虑如何降低时间复杂度。时间复杂度:O(n)思路:遍历一次数组creators,建立关于creatorer的字典结构,每位creatorer存储3个数:流行度之和,最高播放量,最高播放量对应的id。每次遍历时候,都会更新两个原创 2022-10-30 13:52:55 · 348 阅读 · 0 评论 -
理解KMP算法的实现流程
说起KMP算法,就不得不提BF算法。KMP是BF算法的优化。这里梳理一下自己的理解。KMP算法的难点就在于对Next数组的求解。原创 2022-10-08 00:40:44 · 287 阅读 · 0 评论 -
打卡记录编程成长/CSDN编程竞赛(第6期)
之前经常在leetcode上刷编程题,水平的话,周赛4道题,在1.5h时间里基本可以完成3道。困难类型的题目刷的很少,计划先把简单和中等的慢慢刷完,总结一些经验,再冲刺难度高的题目吧。csdn的编程竞赛是第一次参加,4道题目,个人感觉偏容易,但是如果能在都完成的情况下,和小伙伴们比比速度,也还是有点挑战的。原创 2022-09-18 13:11:53 · 460 阅读 · 1 评论 -
图遍历问题:感染二叉树需要的总时间
给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同。另给你一个整数 start。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。2,从start节点开始,BFS思想,分别感染左,右,父节点,并实时更已感染的节点。3,BFS通过栈的形式,记录每次将要感染的节点。当栈为空,即感染了所有节点。返回感染整棵树需要的分钟数。1,求出每个节点对应的父节点。节点与一个已感染节点相邻。节点此前还没有感染。原创 2022-08-21 22:16:49 · 412 阅读 · 0 评论 -
拓扑排序之课程表问题 bfs, dfs 双解
这道题用 BFS 和 DFS 都可以完成,BFS 的写法很经典,BFS 的写法就叫「拓扑排序」,这里还用到了贪心算法的思想,贪的点是:当前让入度为 0 的那些结点入队。1)首先遍历得到每个节点的入度数,以及有向图的字典,即每个节点课程结束后,哪些课程可以继续执行的字典映射。指遍历节点的一条路径到底,由图的低部向上回溯,中间的节点通过栈的结构存储,先进后出即为所求答案。3)最后,建立队列的循环,每次出一个节点,知道所有入度为0的节点都出来了,队列为空退出循环,此时队列一次出来的节点顺序就是所求答案。...原创 2022-08-13 23:19:52 · 407 阅读 · 0 评论 -
python的dict结构比list还是快啊
timeout版本的代码,我是考虑让第一遍出来只保留与下标差相同的组合对数,就用appe存储某个下标差是否出现过,yes字典结构存储有2个及以上出现的次数。结果应该是每次list查询是否出现耽误了时间,导致代码timeout。刷一道中等难度题目,思路和别人的一样,结果我的判定timeout, 后来发现,是我使用的list查找耽误事啦!所以,后来丢弃了appe,直接用yes存储下标差出现的次数,这样通过了所有测试用例。...原创 2022-08-07 09:45:00 · 187 阅读 · 0 评论 -
双指针/滑动窗口问题
leetcode, 2302统计得分小于 K 的子数组数目原创 2022-07-31 23:04:51 · 151 阅读 · 0 评论 -
借助SortedContainers库的算法题timeout问题优化
后来参考别人的代码,建立index数组时候,都直接调用了sortedcontainers库里面的SortedList函数,基于摆脱python库函数的依赖,自己写了二分排序算法来维护index数组为有序数组,完美通过了。否则如果是无序的排分,如果调用highestRate函数时候,实时的求解,不管你实时求解算法写的多优美,我测试了,timeout是必然。刷了几道leetcode的算法题,其中用了这个库创建的列表,集合啥的,能通过大批量的超时测试任务。第二道是调用的sortedcontainers实现的。..原创 2022-07-24 16:40:10 · 286 阅读 · 0 评论 -
字典序-公司命名
("coffee","donuts")对应的公司名字是"doffeeconuts"。-("donuts","coffee")对应的公司名字是"conutsdoffee"。-("donuts","toffee")对应的公司名字是"tonutsdoffee"。-("toffee","donuts")对应的公司名字是"doffeetonuts"。输入ideas=["coffee","donuts","time","toffee"]...原创 2022-07-16 18:23:48 · 201 阅读 · 0 评论 -
字典序问题-字符串去重后字典序最小的子序列
题目给定一个全是小写字母的字符串str, 删除多余字符,使得每种字符只保留一个,并让最终结果的字符串的字典序最小举例str='acbc', 删掉第一个'c', 得到‘abc’,是所有结果字符串中字典序最小的。str='dbcacbca’, 删掉第一个‘b’, 'c', 第二个‘c’,'a', 得到‘dabc’是所有结果字符串中字典序最小的。题目理解:1)每种字符必须保留一个,2)使得保留字符串字典序最小,也就是多余的字符中删减先后顺序,以及开始位置选择的问题。解题思路:首先给所有字符进行词频统计;然后遍历.原创 2022-06-03 15:05:33 · 1411 阅读 · 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 · 2764 阅读 · 0 评论 -
基于Morris遍历实现的二叉树先、中、后序遍历
Morris遍历一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1),通过利用原树中大量空闲指针的方式,达到节省空间的目的。morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度相比,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现空间开销的极限缩减。Morris遍历细节:假设来到当前节点cur,开原创 2022-04-25 21:42:41 · 532 阅读 · 0 评论 -
思路篇-递归与动态规划(4)
整体解题思路:题—>暴力递归写法(重复解)—>记忆化搜索(可变参数,不讲究组织)—>经典动态规划(精细化组织)当表中某个位置无枚举行为,记忆化搜索不用转为经典动态规划,因为时间复杂度相同。完整流程体检的题目1:给定一个无重复正整数的数组arr,表示单张纸币代码的面值数,以及一个目标数值aim,请问可以组成这个目标数值的方法数。暴力递归解法思路当使用 i 张arr[0]的货币,剩下的钱数用剩下的货币值可以有多少种方法,i 的范围从0知道 i *arr[0]≤aim原创 2022-03-20 18:27:07 · 593 阅读 · 0 评论 -
思路篇-递归与动态规划(3)
1,A,B玩家取纸牌牌,看获胜者分数的问题2,村里的人相互收发信的方案数3,N皇后问题的方案数原创 2022-03-16 00:51:07 · 493 阅读 · 0 评论 -
思路篇-递归与动态规划(2)
1,打印一个字符串的全部子序列2,打印一个字符串的全部子序列,要求不出现重复字面的子序列3,打印一个字符串的全部排列4,打印一个字符串的全部排列,要求不出现重复的排列子序列是指一个字符串从左到右,每个字符可以选择要或者不要,但是不能出现右边的字符在左边的前面的情况。题目1打印一个字符串的全部子序列思路:用ans列表记录每条路径形成的子序列,index表示当前到了字符串的第几个字符做选择,path表示该路径下已经形成的子序列。伪代码流程:fun_process(.原创 2022-03-13 15:17:19 · 2367 阅读 · 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 · 386 阅读 · 0 评论 -
数组-BAT面试经典试题:绝对众数,零子数组,最大子数组和
1.绝对众数问题定义:给定N个数,称出现次数最多的数为众数:若某众数出现的次数大于N/2,称该众数为绝对众数。如:A={1,2,1,3,2}中,1和2都是众数,但都不是绝对众数;A={1,2,1,3,1}中,1是绝对众数。已知给定的N个整数存在绝对众数,以最低的时空负责度计算该绝对众数。算法分析:删除数组A中的两个不同的数,绝对众数不变:若两个数有一个是绝对众数,则剩余的N-2...原创 2018-10-04 22:24:24 · 377 阅读 · 0 评论 -
基于python的动态规划经典问题(爬楼梯,取珠宝,最大子序列和,找零钱)
1,爬楼梯问题一个人爬楼梯,每次只能爬1个或两个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法动态规划的状态转移:第 i 个状态的方案数和第 i-1, i-2时候的状态有关,即:dp[i]=dp[i-1]+dp[i-2],dp表示状态矩阵。def climb_stairs(n): dp=[0]*n dp[0]=1 dp[1]=2 for i ...原创 2018-09-22 14:51:02 · 2834 阅读 · 0 评论 -
迅雷2018算法工程师-编程题-python
1. 用x,y表示一个整数范围区间,现在输入一组这样的范围区间(用空格隔开),请输出这些区间的合并。输入描述:一行整数,多个区间用空格隔开。区间的逗号是英文字符。输出描述:合并后的区间,用过空格隔开,行末无空格'''1.首先按照x元素排序,把第一个区间存入res2.从第二个开始遍历:如果当前区间与res[-1]无重叠,直接将当前区间append到res如果有...原创 2018-09-12 22:17:58 · 688 阅读 · 0 评论 -
python实现堆排序、快速排序、归并排序
堆排序 快速排序 快速排序一般选择序列的两头位置,分别记为low和high,第一遍排序将low指针对应的值作为一个key值,试图将大于key值的放在它的右边,小于key值的放在左边。具体实现是以key为标准,将high指针依次向左移动,直到找到一个high对应的值小于key值为止,将此时high指针对应的值和key值互换;然后以此时key值对应的指针为对照标准(即此时hig...原创 2018-09-04 22:24:11 · 574 阅读 · 0 评论 -
输入字符串,统计词频。输出 top n 的单词及个数;如果存在相同词频,则按照字母表顺序
问题用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率最高的单词。返回值是一个元组列表,包含出现次数最高的 n 个单词及其次数,即 [(<单词1>, <次数1>), (<单词2>, <次数2>), ... ],按出现次数降序排列。您可以假设所有输入都是小写形式,并且不含标点符号或其他...原创 2018-07-10 14:05:06 · 2172 阅读 · 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 · 448 阅读 · 0 评论 -
68. 文本左右对齐(python,C++)
题目描述(困难)给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多...原创 2018-12-05 13:15:59 · 873 阅读 · 1 评论 -
59. 螺旋矩阵 II(python)
题目描述(中等)给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]思路分析暂时能想到的就是和54. 螺旋矩阵解法1一样的思路,按左右,上下顺序依次遍历矩阵,从1—n^2 赋值给矩阵对应的位置。代码如下:class S...原创 2018-11-28 18:58:59 · 222 阅读 · 0 评论 -
58. 最后一个单词的长度(python)
题目描述(简单)给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5分析思路先将字符串分割,所有单词就形成一个集合,然后输出集合的最后一个单词即可。代码class Solution: ...原创 2018-11-28 18:12:08 · 199 阅读 · 0 评论 -
62. 不同路径(python)
题目描述(中等)一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2...原创 2018-11-30 18:02:04 · 490 阅读 · 0 评论 -
57. 插入区间(python)
题目描述(困难)给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例 2:输入: intervals = [[1,2],[3,5],...原创 2018-11-27 18:51:49 · 580 阅读 · 0 评论 -
56. 合并区间(python)
题目描述(中等)给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被...原创 2018-11-27 18:33:08 · 868 阅读 · 1 评论 -
61. 旋转链表(python)
题目描述(中等)给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右原创 2018-11-30 16:42:16 · 294 阅读 · 0 评论 -
64. 最小路径和(python)
题目描述(中等)给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路分析新建一个m*n的dp矩阵记录网格矩阵grid到达每一个路径的中...原创 2018-12-02 23:30:49 · 1328 阅读 · 0 评论