- 博客(54)
- 收藏
- 关注
原创 动态规划|力扣343.整数拆分、力扣96.不同的二叉搜索树
元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量;本题要先研究出规律,我们先以拆分10为例,我们可以把10拆分成5*5或是3*3*4,这两种拆分是两种拆分和两种以上拆分结果最大的情况,最终比较后我们选择最大的3*3*4而我们在拆分时可以进行动态的拆分,也就是3*7而7又可以拆分为3*4,我们设i的最大拆分结果为dp[i] 所以表达式应为3*dp[7],由此推出递推公式:dp[i]=j*dp[i-j],并讲此循环的最大结果进行存储。
2022-12-11 13:17:10
418
原创 动态规划|力扣62.不同路径、力扣63.不同路径||
本题和昨天的斐波那契数的递推公式很类似,不过是在一维的基础上升级为二维,首先我们设到达(i,j)的路径有dp[i][j]种,而能到达(i,j)处的只有(i-1,j)和(i,j-1),所以dp[i][j]=dp[i-1][j]+dp[i][j-1],至此推出递推公式,接下来确定遍历顺序,从左至右,从上至下。本题在上一题的基础上加上了障碍物,而我们需要设置一个dp的二维数组,用来存储结果,而obs二维数组用来遍历障碍物的位置, 而递推公式和遍历顺序不变。
2022-12-10 15:04:52
468
原创 动态规划|力扣509.斐波那契数、力扣70.爬楼梯、力扣746.使用最小花费爬楼梯
这些题目都是斐波那契类型得动态规划题目,他们得递推公式都是dp[i]=dp[i-1]+dp[i-2]这种形式,但是确定地推公式得时候我们都需要明确的知道递推公式下标为i处dp[i]代表什么意思。
2022-12-09 13:53:36
458
原创 day26买卖股票的最佳时机&跳跃游戏&跳跃游戏II
这个题相比于上一道的不同就是求出最小跳跃次数,但是我们本质不变,都是通过覆盖范围来判断,我们需要先定义一个end变量来控制结束条件,我们每次遍历start到end这个区间时求出一个最大的覆盖范围,然后我们将start=end,end=maxBoder来更新下次的覆盖范围,在进行此操作时我们还需要增加跳跃的次数,也就是ans++,直至end>=nums.length。
2022-10-22 12:35:14
655
原创 day24逆增子序列&全排列&全排列II(全排列问题:回溯三部曲)
今天学习回溯的全排列问题,分为两种:一种包含重复元素,一种不包含重复元素。
2022-10-19 17:43:03
760
2
原创 day20回溯算法&组合问题
在回溯中,我们可以把递归和回溯的过程想象成一棵二叉树,每次取一位元素,且当path的长度为k时,那就说明我们遍历到了叶子节点的位置,我们就把结果入结果队列;在相等之前我们要递归遍历元素。
2022-10-14 13:11:42
1693
1
原创 day19修建二叉搜索树&将有序数组转为二叉搜索树&把二叉搜索树转为累加树(递归三部曲&二叉树的总结图)
今天结束二叉树题目,感觉最二叉树的属性及操作更深刻了。
2022-10-13 13:24:18
2278
原创 day14平衡二叉树&二叉树的所有路径&左叶子之和
因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
2022-10-07 19:07:03
260
原创 day13二叉树的最大深度&二叉树的最小深度&完全二叉树的节点个数(递归三部曲详解)
继续学习二叉树的知识,在解决这三个问题之前我们要先来理解下深度和高度的知识,这些是解决问题的基础。
2022-10-06 20:30:44
4285
1
原创 day8KMP解决重复的子字符串
比较神奇的想法,但是复杂度较高。首先讲字符串进行合并操作String f = s+s,然后去掉头和尾,对剩下的字符串判断是否包含s操作,若包含则返回true。昨天学习了KMP,今天用kmp解决还是有点难度,kmp还是解决字符串问题快速的算法。最长相等前后缀不包含的子串就是最小重复子串(这句话是解题的关键),能够推出。
2022-09-30 16:22:31
3537
原创 day5有效字母得移位&两个数组的交集&快乐数&两个数之和
本题利用哈希法中数组结构来解决问题,定义一个数组来记录元素出现的次数,接着再判断下一个字符串出现的次数,若出现则把数组对应元素的位置-1操作,最终判断元素是否有剩余。本题利用哈希表中的set结合解决此问题,遍历第一个数组,将结果存进set中,然后遍历第二个数组,若set结合中出现次元素,则存进结果set结合中,达到结果去重的效果。本题利用哈希表中的set集合进行去重存储,以此防止死循环产生,在每次循环的时候怕判断此数是否出现在set中,若出现则表示死循环产生,并退出。
2022-09-26 21:15:27
2536
原创 day4两两交换链表中的节点&删除链表的倒数第N个节点&环形链表II
今天做完链表的力扣题,感觉空指针异常应该不会再发生了;这个题没什么比较难的算法,主要是更好的理解算法的next域,不要指来指去就蒙了本题需要用双指针,方便找到倒数第n个节点。
2022-09-24 13:23:37
4239
原创 day3移除链表元素&设计链表&反转链表
本题利用头插法就可以解决,在力扣中可以达到100%,之前写过头插法,时间长不做又出现了细节问题,现在来复习一下,正常进行链表添加节点是尾添加,而头插法的操作和尾插法相反,创建一个虚拟头节点,让新创建的虚拟头节点指向head,以此来统一待删除元素都不在头节点处,在力扣提交中,运用虚拟头节点可以达到100%;若待删除的元素不在头节点处,则需要进行cur.next = cur.next.next;若要删除的元素在head点处,则需要进行头节点后移操作head=head.next,2)虚拟头节点删除法。
2022-09-23 14:28:11
4404
原创 day2有序数组&长度最小的子数组&螺旋矩阵
定义左右边界和上下边界,让number一直赋值并进行自增操作,而上下左右边界则控制螺旋的边界,并进行赋值操作,直至numbers==n*n结束循环,要注意的点是在某一边界都复制完时,要对边界进行+1或-1操作,缩小边界。定义两个指针,left:指向数组的零索引,right:指向数组的末尾,分别比较指向索引处的平方值大小,将两者中的最大值放进结果数组中,直至遍历到left等于right时,退出循环。
2022-09-22 19:41:42
4561
3
原创 Java排序算法-桶排序
其中比较的最大位数,即为数组中元素的最大位数(且不能为比较负数,如果比较负数需要在比较之前变成绝对值,在加负号)分别从个、十、百...开始排序,第一次比较个位上的大小,第二次比较十位,以此类推。2.在创建一维数组存放每个桶存放元素的数量。1.先创建二维数组存放10个桶。3.遍历每个桶顺序取出元素。...
2022-07-29 14:37:14
753
原创 JAVA线程中的sleep()、wait()、yield()、join()作用
三).其他阻塞运行(running)的线程执行Thread.sleep(longms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。(二).同步阻塞运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lockpool)中。(一).等待阻塞运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waittingqueue)中。三、wait()作用(必须先获得对应的锁才能调用)...
2022-07-28 19:08:01
356
原创 递归机制-迷宫问题
思路:1.先设置好地图,开辟二维数组,讲边界值设置为1,走过的路设置为2;2.调用forward方法进行递归,最开始传入map[1][1],这点的值为0,所以进入下一层if判断,在if判断中进行调用,在到达终点后进行回溯package recursion;import java.util.Arrays;public class LabyrinthDemo { //定义地图 int[][] map = new int[8][7]; //加上边界 1-边界 2-走过的路
2022-05-03 19:46:19
120
原创 八皇后问题(思路分析和代码)
思路:1.摆放第一个皇后,从第1列摆到第8列,在其中某一列符合时,摆放第二个皇后。2.继续从第1列到第8列摆放皇后,其中有满足的继续摆放下一个皇后。3.当摆放到第8个皇后后,会进行判断是否已经摆满8个,若摆满则进行回溯。代码:package recursion;import java.util.Arrays;public class Queen { int max = 8;//定义数组的最大长度 int[] arr = new int[max];//声明数组
2022-05-03 18:28:23
903
原创 数据结构-栈实现(链表)
底层用链表实现1.push:插入函数(采用头插法-head为栈顶) public void push(int data){//头插法插入元素 if(size == 0){//判断是否为空 head = new Node(data); } Node node = new Node(data);//存储节点数据 node.next = head;//将新节点和之前的节点连接
2022-05-03 15:37:29
680
原创 数据结构-栈实现(动态数组)
动态数组和普通数组的区别是:普通数组定义好长度后不可改变,而动态数组会在数组满时修改数组的最大长度。package stack;import java.util.Scanner;public class StackDemo1 { private int[] stack;//用数组模拟栈 private int maxSize;//定义栈的大小 private int top=-1;//定义栈顶 //构造器 StackDemo1(){ }..
2022-05-03 13:23:23
578
原创 数据结构-栈实现(数组)
栈的特点:栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示; 在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿图 1 的栈来说,从图中数据的存储状态可判断出,元素 1 是最先进的栈。因此,当需要从栈中取出元素 1 时,根据"先进后出"的原则,需提前将元素 3 和元素 2 从栈中取出,然后才能成功取出元素 1。 下面的代码是用数组实现的package stack;import java.util.Scanner;public class
2022-05-03 12:19:14
478
转载 heap 和stack 有什么区别?
简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是...
2022-04-08 16:26:49
5369
原创 linux命令
一、目录操作1.目录查询ls /root //查询指定文件ls -a //查看所有文件,包含隐藏文件ls -l | ll // 查询文件的详细信息ls -d //查询目录本身2.切换目录cd /boot //切换到指定目录. //本级目录.. //上级目录/ //根目录~ //管理员目录文件- //返回3.创建目录mkdir a //创建一级目录mkdir -p a/b/c/d //创建多级文件4.删除目录rmdi
2022-04-05 19:44:28
1560
原创 Java数据结构-单向链表实现
链表是有序的,这是内存空间示意图链表是以节点的方式来存储 每个节点包含data域,next域:指向下一个结点 链表的各个元素不一定是连续存储的 链表分为有头节点和没有头节点的链表 链表循环时:temp = temp.next; 删除和插入元素时:都要找到待插入位置的前一个元素package LinkedList;public class SingleLinkedList { public static void main(String[] args) {
2022-04-05 18:52:04
636
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人