自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 332 1

原创 动态规划|力扣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 376

原创 动态规划|力扣509.斐波那契数、力扣70.爬楼梯、力扣746.使用最小花费爬楼梯

这些题目都是斐波那契类型得动态规划题目,他们得递推公式都是dp[i]=dp[i-1]+dp[i-2]这种形式,但是确定地推公式得时候我们都需要明确的知道递推公式下标为i处dp[i]代表什么意思。

2022-12-09 13:53:36 355

原创 day26买卖股票的最佳时机&跳跃游戏&跳跃游戏II

这个题相比于上一道的不同就是求出最小跳跃次数,但是我们本质不变,都是通过覆盖范围来判断,我们需要先定义一个end变量来控制结束条件,我们每次遍历start到end这个区间时求出一个最大的覆盖范围,然后我们将start=end,end=maxBoder来更新下次的覆盖范围,在进行此操作时我们还需要增加跳跃的次数,也就是ans++,直至end>=nums.length。

2022-10-22 12:35:14 568

原创 day25饼干分发&摆动序列&最大子序和(贪心算法)

今天学到了贪心算法,贪心算法得本质就是从局部最优解导致全局最优,其中序列问题值得二刷。

2022-10-21 12:12:15 264

原创 day24逆增子序列&全排列&全排列II(全排列问题:回溯三部曲)

今天学习回溯的全排列问题,分为两种:一种包含重复元素,一种不包含重复元素。

2022-10-19 17:43:03 703 2

原创 day23复原IP地址&子集&子集II(回溯三部曲详解版)

回溯法子集问题和树层去重

2022-10-18 14:09:21 650

原创 day22组合总和&组合总和III&分割回文串(切割问题:回溯三部曲)

最后一个问题比较难需要好好根据讲解理解理解,前两个利用模板可以解决。

2022-10-17 22:00:02 353

原创 day21组合III&电话号码的字母组合

回溯的相关题目,有点难度。

2022-10-15 12:39:49 1107

原创 day20回溯算法&组合问题

在回溯中,我们可以把递归和回溯的过程想象成一棵二叉树,每次取一位元素,且当path的长度为k时,那就说明我们遍历到了叶子节点的位置,我们就把结果入结果队列;在相等之前我们要递归遍历元素。

2022-10-14 13:11:42 1594 1

原创 day19修建二叉搜索树&将有序数组转为二叉搜索树&把二叉搜索树转为累加树(递归三部曲&二叉树的总结图)

今天结束二叉树题目,感觉最二叉树的属性及操作更深刻了。

2022-10-13 13:24:18 2236

原创 day18二叉搜索树中的插入操作&删除二叉搜索树中的节点

今天的题目思路简单,实现起来有些困难。

2022-10-12 13:37:16 2349

原创 day17二叉搜索树中的最小绝对差&二叉搜索树中的众数&二叉树的最近公共节点

继续学习二叉搜索树的应用,今天题目比昨天的好理解。

2022-10-11 13:37:05 1639

原创 day16最大二叉树&合并二叉树&二叉搜索树中搜索&验证二叉搜索树(递归详解版)

二叉搜索树的递归搜索和判断。

2022-10-10 20:28:48 1821 1

原创 day15找树左下角的值&路经总和&从中序与后序遍历序列构建二叉树(递归详解版及总结)

理解二叉树更好的题

2022-10-08 22:36:02 2659

原创 day14平衡二叉树&二叉树的所有路径&左叶子之和

因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

2022-10-07 19:07:03 178

原创 day13二叉树的最大深度&二叉树的最小深度&完全二叉树的节点个数(递归三部曲详解)

继续学习二叉树的知识,在解决这三个问题之前我们要先来理解下深度和高度的知识,这些是解决问题的基础。

2022-10-06 20:30:44 4076 1

原创 day12二叉树的层序遍历&翻转二叉树&对称二叉树(递归详解版)

目录二叉树的遍历及应用(递归分布详细版)

2022-10-05 14:50:04 3257 1

原创 day11二叉树的遍历(递归遍历和迭代遍历)

二叉树的迭代遍历有点难理解,需要手动多模拟模拟。

2022-10-04 21:10:41 2944 1

原创 day10逆波兰表达式求值&滑动窗口求最大值

栈和队列中比较高级的应用

2022-10-03 18:31:16 1493

原创 day9 栈实现队列&队列实现栈以及栈的经典应用

栈和队列互相实现的方式

2022-10-01 13:35:39 3296

原创 day8KMP解决重复的子字符串

比较神奇的想法,但是复杂度较高。首先讲字符串进行合并操作String f = s+s,然后去掉头和尾,对剩下的字符串判断是否包含s操作,若包含则返回true。昨天学习了KMP,今天用kmp解决还是有点难度,kmp还是解决字符串问题快速的算法。最长相等前后缀不包含的子串就是最小重复子串(这句话是解题的关键),能够推出。

2022-09-30 16:22:31 3431

原创 day8KMP算法&next数组求解过程

KMP解决力扣28题

2022-09-29 14:14:55 3415

原创 day7反转链表&反转链表II替换空格&反转字符串里的单词&左旋转字符串

操作字符串的算法题

2022-09-28 16:25:38 2592

原创 day6四数相加&赎金信&三数之和&四数之和

今天学完哈希表得题,感觉更能分清哈希表得使用场景。

2022-09-27 14:11:37 2616

原创 day5有效字母得移位&两个数组的交集&快乐数&两个数之和

本题利用哈希法中数组结构来解决问题,定义一个数组来记录元素出现的次数,接着再判断下一个字符串出现的次数,若出现则把数组对应元素的位置-1操作,最终判断元素是否有剩余。本题利用哈希表中的set结合解决此问题,遍历第一个数组,将结果存进set中,然后遍历第二个数组,若set结合中出现次元素,则存进结果set结合中,达到结果去重的效果。本题利用哈希表中的set集合进行去重存储,以此防止死循环产生,在每次循环的时候怕判断此数是否出现在set中,若出现则表示死循环产生,并退出。

2022-09-26 21:15:27 2513

原创 day4两两交换链表中的节点&删除链表的倒数第N个节点&环形链表II

今天做完链表的力扣题,感觉空指针异常应该不会再发生了;这个题没什么比较难的算法,主要是更好的理解算法的next域,不要指来指去就蒙了本题需要用双指针,方便找到倒数第n个节点。

2022-09-24 13:23:37 4139

原创 day3移除链表元素&设计链表&反转链表

本题利用头插法就可以解决,在力扣中可以达到100%,之前写过头插法,时间长不做又出现了细节问题,现在来复习一下,正常进行链表添加节点是尾添加,而头插法的操作和尾插法相反,创建一个虚拟头节点,让新创建的虚拟头节点指向head,以此来统一待删除元素都不在头节点处,在力扣提交中,运用虚拟头节点可以达到100%;若待删除的元素不在头节点处,则需要进行cur.next = cur.next.next;若要删除的元素在head点处,则需要进行头节点后移操作head=head.next,2)虚拟头节点删除法。

2022-09-23 14:28:11 4319

原创 day2有序数组&长度最小的子数组&螺旋矩阵

定义左右边界和上下边界,让number一直赋值并进行自增操作,而上下左右边界则控制螺旋的边界,并进行赋值操作,直至numbers==n*n结束循环,要注意的点是在某一边界都复制完时,要对边界进行+1或-1操作,缩小边界。定义两个指针,left:指向数组的零索引,right:指向数组的末尾,分别比较指向索引处的平方值大小,将两者中的最大值放进结果数组中,直至遍历到left等于right时,退出循环。

2022-09-22 19:41:42 4459 3

原创 day1二分法查找&移除元素

二分法

2022-09-21 21:04:39 4728

原创 Java排序算法-桶排序

其中比较的最大位数,即为数组中元素的最大位数(且不能为比较负数,如果比较负数需要在比较之前变成绝对值,在加负号)分别从个、十、百...开始排序,第一次比较个位上的大小,第二次比较十位,以此类推。2.在创建一维数组存放每个桶存放元素的数量。1.先创建二维数组存放10个桶。3.遍历每个桶顺序取出元素。...

2022-07-29 14:37:14 681

原创 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 325

原创 递归机制-迷宫问题

思路: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 87

原创 八皇后问题(思路分析和代码)

思路: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 840

原创 数据结构-栈实现(链表)

底层用链表实现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 629

原创 数据结构-栈实现(动态数组)

动态数组和普通数组的区别是:普通数组定义好长度后不可改变,而动态数组会在数组满时修改数组的最大长度。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 541

原创 数据结构-栈实现(数组)

栈的特点:栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示; 在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿图 1 的栈来说,从图中数据的存储状态可判断出,元素 1 是最先进的栈。因此,当需要从栈中取出元素 1 时,根据"先进后出"的原则,需提前将元素 3 和元素 2 从栈中取出,然后才能成功取出元素 1。 下面的代码是用数组实现的package stack;import java.util.Scanner;public class

2022-05-03 12:19:14 448

转载 heap 和stack 有什么区别?

简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是...

2022-04-08 16:26:49 5143

原创 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 1546

原创 Java数据结构-单向链表实现

链表是有序的,这是内存空间示意图链表是以节点的方式来存储 每个节点包含data域,next域:指向下一个结点 链表的各个元素不一定是连续存储的 链表分为有头节点和没有头节点的链表 链表循环时:temp = temp.next; 删除和插入元素时:都要找到待插入位置的前一个元素package LinkedList;public class SingleLinkedList { public static void main(String[] args) {

2022-04-05 18:52:04 598

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除