
算法题/数据结构
文章平均质量分 94
小道仙97
一个不务正业的程序员,梦想成为家庭煮夫。【五十岁退休】
展开
-
经典算法之LRU算法
LRU算法算是个常见的算法,很有必要去了解它,现在我们就来看看什么是 LRULRU 的全称是 Least Recently Used(最近最少使用),就如它的含义一样,最近最少使用的。在实际的场景中大多会把它当作一种 淘汰策略它的应用场景也很简单,我们的存储空间总是有限的,一旦超过了最大限度就必须要淘汰一些数据,那淘汰哪种数据才算是合理的呢?合理的方式有很多,不同的场景也不一样,但淘汰 最近最少使用的数据,在绝大部分场景下都是合理的,所以LRU算法很常见。原创 2022-12-07 22:39:25 · 1221 阅读 · 1 评论 -
八大排序图解算法
其实八大排序如果弄清楚它们的原理并不难,虽然里面有几种排序写起来也很麻烦。但是最难的往往就是,我们会把它们相互混淆,我给每个排序画了一张动图,看图记忆就好很多了。 每种排序都有相对应的解释和图,大家可以看完解释和图然后按照自己的思路去写代码。(当然也提供了测试好的代码) 末尾提供了测试代码,你只需要改动一行代码,就可以测试你的排序是否正确,如果错误会打印出原本序列、你的排序、正确的排序,以帮助你更好的排错。稳定性:如果一组待排序的数字中,有两个相同的数字。在完成排序后,这两个数字的相对位置不变.原创 2020-05-26 14:44:51 · 2824 阅读 · 3 评论 -
面试题10- II. 青蛙跳台阶问题
面试题10- II. 青蛙跳台阶问题原创 2020-05-03 20:13:43 · 224 阅读 · 0 评论 -
二维数组的螺旋矩阵问题
一直在刷LeetCode,也没有放在博客上面,题目太多感觉也没有必要放在这上面。有兴趣的可以看我的GitHub题解: https://github.com/xdxTao/LeetCode1、什么是螺旋矩阵呢?1-1:我们正常的遍历二维数组都是一层一层的遍历。1-2:但是螺旋遍历的方式是这样的2、解题思路2-1:遍历的方式是:我们每次只移动 i、j,其中一个,并且一直移动到底。...原创 2020-01-19 16:36:21 · 802 阅读 · 0 评论 -
统计小于N的质数/找到小于的N的全部质数
1、所有文章优先发表在个人博客上: https://www.xdx97.com2、后续如果有修改的话,可能忘记更新到优快云了,给你带来不便,抱歉。3、个人博客本篇文章地址 : https://www.xdx97.com/article?bamId=646403272499789824这个题在大一学c的时候就遇到了,一直也没太注意。比较简单不是?你只要搞清楚什么是质数就好了。质数...原创 2019-11-20 15:28:25 · 758 阅读 · 0 评论 -
对称二叉树 【leetcode - 101 - 简单】
胡扯:这个题,感觉挺好的。 这里给出两种思路,第二种思路是参考别人的思路写出来的,但是,里面的递归让我弄了很久,也让我对递归更加清楚了一些。事情慢慢变得有趣了 ...思路一: 1、这个是我最先开始想到的思路代码也还好。 2、除去根节点,左右开始遍历。 3、左边按照 左根右 的顺序来遍历,右边按照 右根左 的顺序来遍历。叶子节点没有节点。其它节点如...原创 2019-01-07 00:09:18 · 302 阅读 · 3 评论 -
路径总和 【 leetcode - 112 - 简单】
胡扯:这个题的确见证了我的进步,连续刷了几天的dfs了,从开始的不知如何下手,到这个一次提交以打败 100% 通过,开心。思路: 1、日常非空判断 2、遍历求和。 3、如果是叶子节点就判断当前节点的和,是否等于 所求的和代码: 可以打开下面的注释 查看每一个节点的和class Solution { boolea...原创 2019-01-07 14:18:03 · 211 阅读 · 0 评论 -
有效的括号 【leetcode - 20 - 简单】
工作之后,果然和学校差距太多了。好久都没有刷题了,为了能不能继续工作的原因也是操碎了心 现在情况基本稳定了,可以继续工作,也可以回去上课。算是最满意的结果了吧。 距离蓝桥杯比赛还有20来天,每天下班的时候刷刷题吧,希望可以有所斩获。1、首先 "" 空字符串是返回true的2、第一个符号必须是 ( { [ 其中的一个,这个稍微想一下就好了。3...原创 2019-03-01 20:09:31 · 178 阅读 · 0 评论 -
最小栈 【leetcode - 155 - 简单】
思路: 1、其实这个题很有意思,乍一看很简单嘛。直接new一个栈就ok了。 2、难就难在那个最小数上面,我这里用了一个比较蠢的办法,用一个list去存储当前数据,每次需要最小值的时候就去找出来。 3、找到一个求ArrayList最小值的方法,但是速度比自己写for还慢 Collections.min(arr) class MinStack { ...原创 2019-03-01 20:53:31 · 163 阅读 · 0 评论 -
比较含退格的字符串【leetcode - 844 - 简单】
思路: 1、因为这个题归属于栈,所有我首先想到使用栈去解决。 2、使用栈的先进先出原则,很容易就可以写出这个题。 3、注意点要判断字符串为null的情况,要判断如果当前字符是#,但是栈为空的情况。class Solution { private Stack<Character> stringToStack(String str) { St...原创 2019-03-04 18:59:59 · 199 阅读 · 0 评论 -
最接近原点的 K 个点 【leetcode - 973 - 简单】
思路: 1、这个题应该是很简单的,但是我的代码写的比较复杂。 2、如果熟悉优先队列的朋友应该会写出比较好的算法。 3、我这个就是先存前K个元素,之后再去找出前K个元素最大一个结果,去和当前的对比。 4、我这个算法之后每次都要便利K次以便找到最大的值。 5、优先队列先前就排序好了前K个元素。比较的时候就简单了class Soluti...原创 2019-03-07 13:55:03 · 304 阅读 · 0 评论 -
有效的字母异位词 【leetcode - 242 - 简单】
胡扯: 1、这个题,真是奔溃。题目读错几次,然后导致越写越复杂。 2、题目中隐含着一个意思。(两个字符串的长度如果不同就是返回false)我愣是觉得s字符串的长度大于等于t别人的简单代码class Solution { public boolean isAnagram(String s, String t) { int[] sCounts...原创 2019-03-04 21:04:54 · 217 阅读 · 0 评论 -
关于 Leetcode 上测试没错,提交有错的问题
问题说明:在leetcode上刷题的时候,有时候会出现,测试的时候没有错,但提交就错。这就很头疼了这个问题我遇到几次,慢慢发现了其中的道理。分享给大家,1、如果你的 c/c++ 尽可能不要使用全局变量,这个leetcode已经说明了2、如果你是java,同时也使用了全局变量。 记住千万不要用 static 去修饰,在你的代码中不要出现 static,3、你的代码写的真的有问...原创 2019-01-06 16:22:17 · 11410 阅读 · 8 评论 -
平衡二叉树 【leetcode - 110 - 简单】
胡扯:这个题做的时间还是比较长的,虽然只是一个简单题。不过在做的过程中一直觉得自己可以做出来的。哈哈,最后代码不是很好,只打败百分之36的人,这也是想到的,毕竟写了两次DFS和递归,代码不慢才怪,但是比较好理解。思路: 1、日常非空判断。 2、先前序遍历每一个节点三种遍历 3、在每一个节点的时候,再去遍历以它为根节点的左右长度。 4、比较...原创 2019-01-06 16:11:17 · 214 阅读 · 0 评论 -
递增顺序查找树 【leetcode - 897 - 简单】
胡扯:之前吐槽的 leetcode 使用全局变量的问题,应该是我操作的问题。java还是可以使用全局变量的,只要 别在全局变量前面加上 static 就好了。从本题开始,坚持每道题都写一篇简短的文章。原题位置 :https://leetcode-cn.com/problems/increasing-order-search-tree/思路: 1、首先把树进行 中序遍...原创 2019-01-06 14:07:18 · 393 阅读 · 1 评论 -
数据结构/算法题 在线编写/提交的好地方
目的:数据结构/算法题 在线编写/提交的好地方一直以来都及其的不喜欢做这种算法题。一来,感觉很浪费时间。(做算法题简单则几十分钟,难得可能七八个小时都不一定解的出来)二来,也确实是烧脑,想的头疼。(虽然做出来了之后,会有很大的喜悦感。)三来,可能是因为算法题无法在别人面前炫耀什么的,不如做好一个博客来的直接。随着时间的推移,一直以来被忽略的数据结构/算法题和...原创 2018-12-02 15:48:02 · 555 阅读 · 2 评论 -
母牛的故事 -蓝桥杯算法题
题目描述有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?这个题我做了许久都没有解答出来,主要是思路错了。我一直在考虑这一年和下一年的关系应该成一个倍数的关系。然而思路却不是这样的。 它是一个斐波拉契数列,仔细看,会发现它不是倍数的关系。而是加法的关系。如果你还是想不出来:从第四年开始 每...原创 2018-12-02 16:13:43 · 701 阅读 · 0 评论 -
DNA 算法题,附带解题思路【JAVA代码】
目的:解决下面这个算法题 思路: 1、这个题在做完了提交成功之后,去看题解。大致扫了一下别人的代码,长度都差不多。那可能就没有一个好的公式了只能暴力解题了。 2、第一步,求出一共要打印多少行,这个很简单,直接就是 a + (a-1) * (b-1) 3、然后就是去输出每一行数据。每一行又分三个部分。前置空格 中间空格 ...原创 2018-12-12 16:46:05 · 839 阅读 · 0 评论 -
2^k进制数 算法题练习/蓝桥杯 【简单解法,java】
目的:解决这个2^k进制数的问题。看来半天的题目,没理解什么意思。也懒得去理解了,只要解出来了就好了。直接暴力解题。 思路1、先求出这是多少进制数 (这个很简单,一个 for循环搞定)2、看看可以分成几段,直接 w / k ,不能整除的话,结果加1(这里我理解成,就是最多能为多少位)3、一个简单的累加就好了,你会发现规律就是,累加 上一步计算出来的次数,里面的循环也简单...原创 2018-12-11 16:01:10 · 676 阅读 · 1 评论 -
N叉树的最大深度 DFS 最简单算法
胡扯 : 最近开始做算法题,遇到了一个瓶颈。就是 DFS(深度优先遍历),BFS(广度优先遍历)。这块简单来说就是我啥也不会,之前在数据结构这门课上老师讲过,但是没有好好听,遇到了几个题全部都写不出来,看答案还有点吃力。下决心刷一个星期的DFS和BFS。先来看这个入门级题目:N叉树的最大深度先直接给出一个比较简单的答案 class Solution { ...原创 2019-01-03 16:00:49 · 1243 阅读 · 0 评论 -
二叉树 递归 前序 中序 后续遍历【java简单】
胡扯:第一次接触 前中后 遍历,应该是在上数据结构,玩手机抬头偶然听说的。很长一段时间我去记它的规律又因为并不是很常用,所以总是记记忘忘。 但是最近在学习递归的时候,发现用 递归去遍历真的是好用又好记还好理解,本着好东西不私藏的原则,在这里贡献给大家。先简单说一下,三种便利顺序。(心急了直接上后面看代码) 1、前序: 根左右 2、中序: 左...原创 2019-01-03 20:26:08 · 333 阅读 · 0 评论 -
图像渲染 【leetcode - 733 - 简单】
胡扯:这个题在评论区有人说看不懂,我个人觉得还比较好理解。建议遇到不太好理解的题目的时候,动手拿笔写写画画,有助于理解。日常吐槽 leetcode 不可以用全局变量的问题。明明说是 c/c++,不可以,但是我用的是java啊。题目地址 :https://leetcode-cn.com/problems/flood-fill/ 还有个问题,就是有时候那个执行时间不必去在意...原创 2019-01-04 16:13:36 · 626 阅读 · 0 评论 -
Dijkstra 最简单易懂的解释 【附java代码】
胡扯:这个问题,来自leetcode上面的一个题。两天前已经解答出来了,但是由于乱七八糟的事情,还没有来得及做一个总结。好吧,一个算法竟然前后这么几天才完结。真的是。。。 你可以先去百度百科看看一下这个算法的定义。 下面将一步步诱导你写出这个算法。1、大佬级别人物,直接看下面这个图。就可以写出这个算法的。2、听一个视频讲解上面gif所表达...原创 2019-01-10 14:18:49 · 330 阅读 · 0 评论 -
二叉树的最小深度 【leetcode - 111 - 简单】
胡扯:自从 明白了 用递归遍历二叉树,感觉这样的题已经没有什么难度了。 但是很奇怪为什么这个题的通过率只有 35.5%,去看了一下评论,大概明白了,很多人是没有看明白题目的要求。是 根节点到叶子节点。思路: 1、日常非空判断。 2、看明白题目,是求到 叶子节点的 最小深度。 3、下面给出代码,为了跟好的理解,多加了一个输出。如果要提交请注释...原创 2019-01-10 14:45:22 · 170 阅读 · 0 评论 -
N叉树的层序遍历 BFS 【 leetcode - 429 - 简单】
胡扯:前几天在刷DFS的题,然后把简单的题刷完后,开始准备BFS,发现BFS 和 DFS 的题都有些重复。只剩下两个题了。这个BFS的层序遍历,是个简单题,但是也写了一会,主要是之前没有这方面的经验。思路: 1、BFS 层序遍历,一层层的遍历。我们可以把多叉树,每一层看成一个集合。(根节点,可以看成只有一个节点的集合) 2、然后我们使用递归的方法一层层去遍历。...原创 2019-01-10 16:21:00 · 418 阅读 · 0 评论 -
二叉树的层序遍历 【leetcode - 107 - 简单】
胡扯:真好,我上一个题是用 Arraylist集合 来完成的。对于这个题来说,那就是很简单了每次添加到开头,就相当于反过来了。 至于 二叉,还是多叉,无所谓了。思路: 1、参考上一个多叉树的 层序遍历。N叉树的层序遍历 2、只需要在把每一层的数据 添加到集合的时候。变成 list.add(0,aa); 就好了,这样就成了反序的了。代码:List...原创 2019-01-10 16:53:31 · 302 阅读 · 0 评论 -
求出 最长回文字符串 JAVA版本【给出编码思想-适用于任何语言】
目的:在任意的字符串中求出最长的回文字符串思路:(适用于任何语言)1、判断当前给定的字符串是否是相同的字符串(也就是所有字符都相同),如果是直接返回了。2、如果第一步没有返回,就以非第一个字符为轴,分别求出以它为轴的,双数回文字符串,和单数回文字符串的长度。3、把上述求出来的长度,和已经有的回文字符串长度对比,如果长于已经存在的回文字符串的长度,就进行赋值...原创 2018-12-04 10:49:30 · 2005 阅读 · 0 评论