
基础算法
菜汪在路上
这个作者很懒,什么都没留下…
展开
-
likou47全排列||(树枝不重复取数)和层序去重
而层序去重的原理则是:当给定元素中有相。全排列是列出所有可能,原创 2023-02-03 13:26:03 · 84 阅读 · 0 评论 -
回溯层序去重(相同的数,一个for中只用一次)
在每层树中,加入一个记录数据是否使用的数组或集合。只要不重复取相同的数,就不会出现重复。4,这种情况就重复了,原创 2023-01-31 12:08:04 · 96 阅读 · 0 评论 -
likou93复原ip(递归回溯操作字符串)
Check时,注意字符串为空时,转换int就会报错,使用Integer的时候,尽量加上长度判断。增加“.”后,字符串的长度也会增加,在回溯的时候,前,后取字符串拼接,跳过“.”。不满足ip条件,该二叉树下面的子树就不要判断了。原创 2023-01-30 12:24:57 · 92 阅读 · 0 评论 -
二叉搜索树的最近公共祖先likou235、二叉搜索树的插入元素likou701
不过在这里有一个坑,题目并没有指定p一定是左节点、q一定是右节点,所以一定要多加一个qroot.val,这样就会避免。所以进行迭代的条件就是判断待插入元素在左右节点的方向。原创 2022-11-05 20:48:37 · 521 阅读 · 0 评论 -
二叉树的公共祖先likou236
本体思路我确实看的别人的,但是这个代码确确实实时自己写的,难度确实不大,思路很重要,我得多去看看别人的思路,好好学学了~所以,我们就可以利用后续遍历,然后判断每次的节点左右是否满足这个条件,我们第一个想到的就是头部根节点,它是所有节点的。题目说了,所有元素不会重复,p,q也一样。是不是有一种从写往上遍历的感觉!这是一个很不错的题目,让我复习了。这题说,求最近的公共祖先。原创 2022-10-31 10:27:16 · 253 阅读 · 0 评论 -
二叉树相邻节点最小绝对差值(likou530)、二叉树中的众数(liou501)
这里我踩的坑就是,只有一个元素的时候,MAX的判断不会进行,所以还是。二叉树相邻节点最小绝对差值这题的解题方式和判断二叉搜索树是一样的。存入map中,记录出现最多的。1.遍历完整的二叉树,将。这个就不多说,下一题。2.遍历map,判断。原创 2022-10-28 16:40:18 · 382 阅读 · 0 评论 -
寻找二叉树(likou700)、验证二叉搜索树(likou98)
其实这一个版本并不是我的第一版,我的第一套代码是将数据放集合中,递归完毕后进行判断。这一版本的代码可以同时遍历和判断,一旦不满足二叉搜索树的概念时,就返回false。乍一看没啥问题,仔细一看就不对了,19明明比根节点20小,为啥在左边呢!当已经寻找到指定节点时,就可以返回了,所以我们定义一个标识量:是否找到。大家在写寻找某一个数的时候,都可以使用这种剪枝的方法噢。我改了半天,还是没改对,所以这是一个大坑,特坑,无敌坑。1.判断根节点、左节点、右节点是否为空、对,没错,我和你们一样,结果寄了!原创 2022-10-28 16:27:55 · 515 阅读 · 0 评论 -
likou654最大二叉树
比起来简单很多,所以我能直接写出来,106题难度确实大,我得多看几遍。在递归中比较获取最大值,创建节点,赋值。利用递归传入开始、结束下标,达到区间效果。原创 2022-10-22 21:08:22 · 202 阅读 · 0 评论 -
分别从中序、后续中组成二叉树(likou106)
既然要在arr1中寻找根节点对应的左右节点。我们就直接将arr1的数据、下标存入map中,快速寻找到下标。既然数组开始下标与结束下标重合,就说明已经没有节点可以使用了。所以我们每次都是找到arr2的最后一个元素作为根节点。likou106本题会给你两个数组,arr1由中序遍历,arr2用后续遍历,返回一个原始二叉树。各位一定要仔细思考代码的逻辑,不说了,我再去想半小时。arr2的最后一个数据所对应在arr1的下标,t为根节点的下标,t的左边所有元素都是左节点,又是一个完整的二叉树,也有左右节点。原创 2022-10-22 11:01:11 · 293 阅读 · 0 评论 -
二叉树包含子二叉树~~
书接上回,原本安静如潭水的广场,在陆陆续续答完题的考生结束后,变得热闹起来、每个人不已翘首观望,等待广场中央的那一块屹立了百年的石碑发出成绩。不过今日他还在这里,继续考核内院选拔,转眼间,一人身着破烂衣服,脚踏人字拖,时不时还在抠鼻屎,只见他一跃而上,落到了石碑之下,说到,拿题来!这时,宗主暴力哥说到,慢着、“小伙子,你很叼啊!”,“那不然”鼻屎哥回到,“行吧,今天做我给的题”,一道卷轴落下,开始了今日的内院选拔!暴力哥说到:“不错,暴力宗欢迎你的到来,我们算法阁见!免礼吧,你们继续,我出来透透气罢了!原创 2022-10-18 19:41:56 · 248 阅读 · 0 评论 -
左叶子之和、二叉树的所有路径。
欢迎各位来宾、各位参选者的到来,本人代表暴力宗欢迎各位,若有招待不周,还请见谅。转眼间,又到了一年一度的暴力宗外院选拔弟子的日子,本次选拔,只有两题作为题目,完成时间更快、时间复杂度更低的人员可进入外院修行!我这里还有一道千古难题,只有本宗宗主解开过,你要是能解开,莫说内院,我这个长老直接给你来做!这里要注意的是,存入时不要将存入放在递归循环中,处理最后一次会非常麻烦。直接遍历全部节点,在递归时,传入一个标识符,1为左节点,2为右节点,开始传入0.既让要给出路径,那么就要遍历全部路径,肯定也需要使用回溯。原创 2022-10-18 17:28:21 · 562 阅读 · 0 评论 -
平衡二叉树的判定
当左右节点任何一个节点返回-1时,就说明下面已经不满足平衡二叉树的定义了,就可以继续返回-1了。我这里有一本平衡二叉树秘籍,我与你有缘,赠送与你,望发扬光大!给定一个二叉树的根节点,请判断是否为平衡二叉树(左右节点的高度绝对子小于等于1)。这里我们将返回值为-1定为此二叉树不为平衡二叉树。该男子使用层序遍历大法,信誓旦旦的前往考核地点。老者说完,化作一缕青烟消失在时空当中————这里大家画一个二叉树,从下往上画一遍就懂了。男子一脸骄傲的样子,兴冲冲跑去测试,过了!啊——咚——啃——!递归条件:不为空时。原创 2022-10-14 09:34:01 · 446 阅读 · 0 评论 -
二叉树最小深度
我发现当走到第一层的时候,值就已经为。这玩意还是得自己慢慢体会。还是我的层序遍历好用,嘿嘿~看不懂,学不会,不会做。于是我又继续想啊~想~原创 2022-10-13 15:39:40 · 248 阅读 · 0 评论 -
likou101题,判断对称二叉树
当我看见这道题的时候,我就在想,这不就用一个层次遍历不就能够ac了嘛、于是我开始了我的幼稚想法!后面还是去看了别人的方法,果然大佬还是大佬,不是我这种幼稚的菜鸡能够比拟的,上代码!利用层次遍历获取每层的元素,然后存入集合,再用双指针进行判断头尾是否相等。以上条件都不满足时,就是左右节点相同,返回ture。根据大佬的描述,先遍历外层二叉树,其次遍历内层。左、右节点但凡有一个不相同,则为false。一句话,题目很有趣!原创 2022-10-13 10:12:30 · 181 阅读 · 0 评论 -
二叉树的一个统一模板的迭代方式
为标识 ,看到这里,你们的心情和我刚开始一样!这里的空指针指的是节点为空。也算是一个取巧的方式,以前学的迭代法代码风格只能适应一种遍历方式,这样看着很难受。会加上null,就算你是叶子节点,会加上null,这样下一次保证了操作叶子节点!到了这里,你会发现,好像就是在模拟中序遍历的入栈顺序,数据结构很枯燥,当前时间晚七点半,楼道中已空无一人。后,收益其实非常的多,跟着大佬走,工作不用愁,意味着根节点肯定不能在左节点前处理,所以呢,一旦遇见空,那么就意味着就要处理节点了。小提示:遇null处理,原创 2022-10-05 19:53:24 · 505 阅读 · 0 评论 -
查找循环链表头likou
很神奇的查找开始循环头,要使用数学进行论证,不过检测是否魏循环链表倒是挺简单的,块指针在前面跑,慢指针在后面,原创 2022-09-17 08:29:12 · 165 阅读 · 0 评论 -
FileReader、字符流的输入(文件数据获取)和FileWriter字符流的输出(文件数据写入)
这个类和前面的FileInputStream差不多,这是这个类是一次取一个字符 重点是这个字符输出方法FileWriter:close()方法可以关闭打开的资源,并且刷新写入的数据,因为没刷新之前数据是存储在内存当中并且一旦使用close()方法,就代表关闭资源,无法在继续使用flush()刷新数据方法......原创 2022-07-07 16:23:02 · 320 阅读 · 0 评论 -
likou跳跃游戏||
相比跳跃游戏|,这个升级版我认为还简单一些,只不过不容易想出来,题目有点非常人理解定一个当前最长步数max,和一个正在使用的步数maxpretion,本代码最不好理解的就是i==maxpretion,我想了半天,为啥i明明是下标,怎么和步数对比,后来突然想通了。因为下标0的时候肯定会有一步,所以更新步数过后正好对应了...原创 2022-06-10 20:17:22 · 450 阅读 · 0 评论 -
likou55跳跃游戏(贪心算法)
55. 跳跃游戏 - 力扣(LeetCode)本题你若不看题解直接做出来,真的牛逼!!!上代码:原创 2022-06-10 19:23:25 · 404 阅读 · 0 评论 -
力扣:我的日程安排 |||(TreeMap的运用)
本来这题都是用的线段树来解决,我实在看不懂,在b站上找到了一个大哥用TreeMap做的,又学到了!!题意很好理解,只要是在一个时间段,就为预定,本来我是打算自己暴力判断,不过我想来想去,放弃了~~首相要想真正理解这道题,我们得分清楚HashMap和TreeMap的区别,为了分清它俩,我想了一晚上,今天早上起来看了别人的代码,自己改了一下,才真正理解到。上代码!! 你会发现,明明按照字典:HashMap的c在b的后面,a在b的前面,为啥全乱了,而TreeMap却没有收到影响,这就是TreeMap的k原创 2022-06-07 09:16:16 · 185 阅读 · 0 评论 -
力扣526. 优美的排列
根据题目,做过全排列的同学很快就能想出方法: 这个可以过60%,题目的数据达到了15,到12的时候就已经一时半会搜不出来了,所以我们要进行优化:同时判断同时搜索经过优化,我们减去了最后的判断数组,节约了很大一部分时间...原创 2022-06-05 18:48:21 · 266 阅读 · 0 评论 -
478. 在圆内随机生成点
题目我也是第一次做,建议先去做一下470. 用 Rand7() 实现 Rand10() - 力扣(LeetCode) 这道题可以理解一下《拒绝抽样》思想做完这道题以后,我们在仔细想一想,题目到底什么意思,我们看一下样例:我们发现,返回的[x,y]点是在指定的r圆内的,我们看一下下图: 如图所示,三个随机[x,y]表示的黑点,都在圆内,就是满足的我们看一下代码: 你们肯定很好奇为啥要2*r,因为我们随机获取的范围是在(2*r)^2正方形里面,直接*r-r最后一个样例过不去,也不符合我们解题本题的思想..原创 2022-06-05 11:34:55 · 600 阅读 · 0 评论 -
力扣76题:最小覆盖 字串(滑动串窗口)
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"输入: s = "a", t = "aa"输出: ""解释...原创 2022-05-31 19:31:07 · 275 阅读 · 0 评论 -
力扣3:无重复字符的最长字串
输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。本题我非常喜欢,因为题意清楚(其实是因为自己比较...原创 2022-05-30 17:43:09 · 282 阅读 · 0 评论 -
力扣1022二叉树节点转换二进制相加
我这个菜逼又来了,菜到抠脚本来用了迭代方法,结果回溯节点的时候一直错,不是多一个,就是少一个后面用了递归,向作者低头1.分别递归左节点,右节点。2.当前节点为空结束3.左右节点同时为空的时候进行计算/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tree...原创 2022-05-30 10:53:37 · 1420 阅读 · 0 评论 -
力扣238题,除自身以外数的乘积
这题呢感开始没注意看下面的提示,直接按照前缀和进行计算了,算出存入数组,循环除以本身,结果给我一个0,然后报错后面看了题解,刚开始我是这样想的,只不过后缀不知道怎么求,所以没怎么做。1.除去本身=前缀积*后缀积class Solution { public int[] productExceptSelf(int[] arr) { int t[] = new int[arr.length]; t[0] = 1; int h[] = ..原创 2022-05-28 15:42:50 · 138 阅读 · 0 评论 -
likou面试题17.11
原本我想的是分别找出s1到s2的距离,和s2到s1的距离,后面提交就是错的,想了想,也对,如果中间有两个相同的s1或者s2,就错了;所以改了一下:1.定义i,j,分别存储s1,s2的下标,然后没次循环相减求绝对值,利用贪心思想,每次取最小的,输出就好了class Solution { public int findClosest(String[] arr, String s1, String s2) {int i = -1; int j = -1; int min =..原创 2022-05-27 08:18:52 · 131 阅读 · 0 评论 -
蓝桥杯第十届c组决赛:矩阵计数
直接用dfs进行搜索大致思路为:1.从0,0开始,判断是否能够放入x,2.当前行数达到了指定行数时,就计数,3.当列达到指定值-2的时候,就得进行下一行的搜索,从0开始import java.util.Arrays;import java.util.Scanner;public class tise1 { static int n; static int m; static int sum = 0; static int[][] arr;原创 2022-05-22 16:45:08 · 401 阅读 · 0 评论 -
蓝桥杯第十届国赛:平方拆分(dfs)
将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 13^2 + 25^2 + 35^2 = 2019 与 13^2 + 35^2 +25^2 = 2019 视为同一种方法(^代表平方)。本题填空,直接深搜找1.没次dfs传入本次的减去本次平方2.最大平方时45*44,所以不能超过453.当本次结果小于0时舍去,等于0就说明已经找到一种方法4.为了去重,我们每次进行时就把当前的平方数i+1,不然会多出总搜索次数次pac原创 2022-05-21 20:11:26 · 500 阅读 · 0 评论 -
力扣961题找出重复的数据
这题太简单了,根据题意,找到重复第二次的数据输出就好了class Solution { public int repeatedNTimes(int[] arr) { int ans=0; Arrays.sort(arr); for (int i = 0; i <arr.length-1 ; i++) { if(arr[i]==arr[i+1]){ return arr[i];原创 2022-05-21 10:41:32 · 129 阅读 · 0 评论 -
第十届蓝桥杯决赛c组:递增序列(暴力)
问题描述对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。例如,如下矩阵中LANNQIAO有LN、LN、AN、AN、IO、AO、LQ、AI、NO、NO、AQ、IN、AN 等 13 个递增序列。注意当两个字母是从左下到右上排列时,从左向右看和从上向下看是不同的顺序。对于下面的 30 行 50 列的矩阵,请问总共有多少个递增序列?(如果你把以下文字复制到文本文件中,请务必检查复制原创 2022-05-20 22:41:43 · 213 阅读 · 0 评论 -
leetcode436题寻找右区间
又到了谱写每日一题的时候了,让我们来看看,今天是啥魔鬼:题目一看,考!!什么东西!看都看不懂!看题解去......好,我回来了:本题呢,就是寻找比结束区间<=开始区间比如:1:[3,4]2:[2,3]3:[1,2]首先看第一个的结束区间:4,让我们来找找第一个开始区间比4<=的是谁?对!你没看错,没有!有个寂寞!就是-1在看看第二个:3,欸,这个好像有,对!没错就是第一个的3,它是3=3就是0(下标哦!!)看看第三个:2,我们瞅瞅,我靠原创 2022-05-20 15:54:05 · 181 阅读 · 0 评论 -
力扣462最少移动次数使元素相等
本题思路很简单,将最大值最小值找出来,取中数,然后找出每个数和中数的差class Solution { public int minMoves2(int[] arr) { // Arrays.sort(arr); QuickSort(arr,0,arr.length-1);// for (int i = 0; i < arr.length; i++) {// System.out.println(arr[i]);// } int res = ...原创 2022-05-19 11:21:13 · 114 阅读 · 0 评论 -
力扣每日一题:后继者(中序遍历)
今天这个题算是给我巩固了一下中序遍历一、本题还是使用两种方法,递归和迭代1.递归:分为左遍历,右遍历,中遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {..原创 2022-05-16 22:06:36 · 254 阅读 · 0 评论 -
力扣每日一题:一次编辑
众所周知,力扣的题目都很骚!!!!今天的题目格外有趣,你要是不注意看,又是两三小时的无尽深渊(没错,又是我陷入进去了!)来分析题目:1.它说只进行一次:删除、插入、或者替换2.给了俩字符串3.首先我们就想,如果这俩字符串相等是什么原因?很显然,就是替换4.a>b呢?对!没错!就是删除5.a<b就是插入对吧!...原创 2022-05-16 21:54:39 · 120 阅读 · 0 评论 -
力扣猫和老鼠
class Solution { static int N = 55; static int[][][] f = new int[2 * N * N][N][N]; int[][] g; int n; public int catMouseGame(int[][] graph) { g = graph; n = g.length; for (int k = 0; k < 2 * n * n; k++) { .原创 2022-05-10 09:36:28 · 100 阅读 · 0 评论 -
力扣442题:数组重复的数据
本题其实可以用暴力直接做,计数器做,不过应该会超时,所以我用了这种方法;1.另外开一个arr数组大的数组chak;2.一次循环,在指定的chak元素++;3.判断chak元素等于2的元素,符合就加入list集合里面class Solution { public List<Integer> findDuplicates(int[] arr) { List<Integer> list = new ArrayList<>();原创 2022-05-08 15:29:24 · 76 阅读 · 0 评论 -
力扣每日一题:最小基因变化(BFS广度优先搜索)
首先的,这个题要是懂BFS就非常简单,看一眼就会,要是不会,给你一个链接,自己去看看广度优先遍历、双向广度优先遍历(Java) - 单词接龙 - 力扣(LeetCode) (leetcode-cn.com)我说一下思路:1.定义一个队列,符合本题题意,先进先出2.定义两个集合一个装检查过了的元素,一个是否包含指定元素,set、list都可以,只要有contnias检查元素方法都可以具体解释在代码里:class Solution { static char carr.原创 2022-05-07 19:46:54 · 144 阅读 · 1 评论 -
力扣933题:最近的请求次数(队列)
1.本题及其迷糊!!!2.经过我这个菜逼看了无数次题解,终于有一丢丢眉头了3.本题的意识就是在给定的时间段的请求次数,它会更新请求;4.我们用队列来存储,因为是先进先出嘛,完全符合题意5.加入队列后,我们取出队列的第一个值,对比t-3000,如果前者大就啥也不干,因为这个元素符合题意,不用淘汰,小于的时候就不行了,这个请求就已经过期了,要出队列,poll()掉;class RecentCounter { Queue<Integer> dui=new LinkedLi原创 2022-05-06 15:39:22 · 987 阅读 · 0 评论 -
力扣713题:乘积小于k的子数组
nums = [10,5,2,6], k = 100很显然:每个元素10,5,2,6都不大与k,所以有4种了然后就是10,5加一,5,2加一,5,2,6加一,2,6加一就是八种,这是我们看出来的,而用计算机来做,应该这样:首先我们创建一个左指针,右指针都为0,然后还有一个存放当前乘积的变量ras.然后如下操作:1.右指针加一[0,1]为ras=[10],小于k=100计数加一2.右指针加一[0,2]为[10,5],ras=10*5=50小于k=100,计算器加一3.右指针加.原创 2022-05-05 22:37:40 · 408 阅读 · 1 评论