自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 【Java】HOT100+代码随想录 动态规划(上)背包问题

两个for循环的顺序无非是先遍历物品还是先遍历背包容量,在二维数组中其实都行得通,但是遍历物品更好理解。根据递推公式,每一个dp[i][j]其实都是由上一个dp[i-1][j]或者上一个dp[i - 1][j - weight[i]] 推导出来的,如果以表格的形式来看,位于dp[i][j]的左上角,如果先遍历物品,就是在每一个物品都遍历一遍不同的背包重量,从左到右,从上到下;而如果先遍历背包容量就是先从上到下,在从左到右,由于数据位于左上角,所以两个for的顺序都不影响dp[i][j]的推导。

2024-05-09 11:30:03 828 1

原创 【Java】HOT100 贪心算法

只要求利润。

2024-04-29 17:19:29 1358 1

原创 【Java】HOT100 二分查找、栈与堆

思路:先二分查找到,再滑动窗口(如果数太多了滑动太慢,就二分找左右界)

2024-04-25 15:25:04 756 1

原创 【Java】HOT100 回溯

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。

2024-04-23 16:38:27 641 1

原创 【Java】HOT100 链表

做过总结。

2024-04-15 17:12:19 849

原创 【Java】HOT100 哈希到普通数组

​​​​​​​。

2024-04-13 22:24:41 917

原创 【Java】二叉树总结-自用

求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中)。递归和迭代两种,递归只需改变顺序,而迭代则都有所不同,迭代用stack,对于前序:中左右出栈需要先以中右左入栈;4. 求二叉搜索树的属性(二叉搜索树的属性一定用中序,因为可以利用它的有序性)对于后序,相当于中左右入栈,以(中右左)来入栈,这样再逆转就是(左右中)。1. 首先,最基本的深度优先遍历(前中后序),以及层序遍历。层序遍历题的特征都很明显,典型的如。在其中进行多样化操作。

2024-04-08 15:52:03 848 1

原创 【Java】代码随想录二叉树09| LeetCode669 修建二叉搜索树、LeetCode108 将有序数组转换为二叉搜索树、LeetCode538 把二叉搜索树转换为累加树

左边符合条件的节点接入root.left,右边符合条件的节点接入root.right,最终返回修剪过的树的root。既然是累加(或者比较),都需要用到前一个节点的数值pre(int类型),且要记得更新全局变量pre。(因此前面还必须先找到符合条件的节点,就利用递归函数的返回值,相当于是上一层返回值传给这一层)。思路:这个累加树显然用了右中左的逆序累加顺序,我们也可以用右中左(反中序遍历),然后顺序累加;删除和插入/增加二叉树节点,都是用递归函数的返回值来完成,这样是比较方便的。

2024-04-04 22:28:51 379

原创 【Java】代码随想录二叉树08| LeetCode235 二叉搜索树的最近公共祖先、LeetCode701二叉搜索树中的插入操作、LeetCode450删除二叉搜索树中的节点

思路:对于二叉树,我们是用后序遍历比较left和right;由于二叉搜索树的有序性,可以比较root和p,q的的大小,从而有序地查找最近公共祖先。可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。思路:这道题需要考虑到递归函数递归三部曲:①传入参数value和根节点root,返回值也是root(新插入节点后的树)②终止条件:root等于null的时候,新建并返回节点(没错,带返回值更加简单)③单层递归:左右中,中就返回root;迭代法也很好做,就是利用了一个pre。

2024-04-04 17:38:34 331

原创 【Java】代码随想录二叉树07| LeetCode530 二叉搜索树的最小绝对差、LeetCode501二叉搜索树中的众数、LeetCode236二叉树的最近公共组先

最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。思路:由于二叉搜索树中序遍历就是一个就是一个有序数组,那么就转变成了在有序数组上求最小绝对差值。那么既然要找公共祖先且深度要尽可能大,最方便就是自底向上查找。可以根据左右子树的返回值,来处理中节点的逻辑。如果是普通二叉树,第一反应是用map存储。但是已知这是二叉搜索树,所以第一反应是。在这个过程中,由于要比较,因此。

2024-04-04 15:57:20 369

原创 【Java】代码随想录二叉树06| LeetCode654 最大二叉树、LeetCode617 合并二叉树、LeetCode700 二叉搜索树中的搜索、LeetCode98 验证二叉搜索树

思路:递归函数思路:同时遍历两个二叉树和遍历一个二叉树是一样的,只不过传入两个树的节点,同时操作。思路:找到目标值对应的节点,并返回以该节点为根节点的子树迭代法则更加简单,因为二叉搜索树的特殊性,也就是节点的有序性,可以不使用辅助栈或者队列就可以写出迭代法。

2024-04-02 15:38:48 251 1

原创 【Java】代码随想录二叉树05| LeetCode513 找树左下角的值、LeetCode112、113 、437、124路径总和最大和LeetCode105、106 从中序和后序遍历序列构造二叉树

让计数器先初始化为目标和targetsum,在回溯的过程中再依次递减,如果最终到叶子结点targetsum==0,则说明存在。单层递归的逻辑:首先《中》是否为空,是否符合终止条件;单层递归的逻辑:首先《中》是否为空,是否符合终止条件;第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)首先构造回溯函数,返回值为bool,传递参数为根节点root和。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第五步:切割后序数组,切成后序左数组和后序右数组。

2024-03-27 22:51:18 910

原创 【Java】代码随想录二叉树04| LeetCode110 平衡二叉树、LeetCode257 二叉树的所有路径、LeetCode404 左叶子之和

层序遍历可以用来求深度,但是就不能用来求高度了,如果用的话,就需要还定义一个函数,该函数通过栈模拟的后序遍历求每个节点的高度(其实是通过求传入节点为根节点的最大深度来求的高度)求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中)。参数(根节点,存放每一条路径的path,存放结果集的res)和返回值(void)思路:要求从上到下找到从根节点到叶子的所有路径,所以需要前序遍历(中左右),因为没有很好的模拟回溯的过程,所以迭代法有很多重复的计算。

2024-03-27 20:51:47 370

原创 【Java】代码随想录二叉树03 | 二叉树的最大、最小深度,完全二叉树的节点个数

所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。左子树为空,右子树的深度+1;右子树为空时左子树的深度+1.迭代法:遇到叶子结点,则直接返回最小深度depth。

2024-03-26 21:59:36 228

原创 【Java】代码随想录二叉树02| 层序遍历、翻转二叉树、对称二叉树(一口气打十二个)

中我们讲到了二叉树的遍历方式包括深度优先遍历(前序、中序、后序)以及广度优先遍历即层次遍历,深度优先遍历既可以用迭代法,又可以用递归法来实现,而。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。①参数和返回值:参数是左子树节点和右子树节点(比较两颗子树),返回值类型为bool。DFS前序遍历(中左右):先交换左右孩子节点,再反转左子树,翻转右子树。比较左节点的左/右孩子和右节点的右/左孩子,都对称则返回true。左子树为空,右子树不为空——false;

2024-03-10 21:13:25 893 1

原创 【Java】代码随想录二叉树01 | 前序、中序和后序的递归遍历和迭代遍历

①参数和返回值 ②终止条件 ③单层递归的逻辑。

2024-03-06 21:14:51 777 1

原创 【Java】栈和队列:总结

①对于大顶堆,pop出的k个元素就是res;②对于小顶堆,先初始化,再判断新元素和根节点,最后留下的k个元素就是res;③对于简化解法,只要先添加元素,大于k了就pop,这样小顶堆将始终保持在k个,且无需自己判断大小而由。,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。题2的优先级队列就是一个披着队列外衣的堆,直接用priority_queue(优先级队列)实现就可以了。栈非常适合做匹配对称(即有顺序的匹配)题目。区分单调队列和优先级队列,题1的主要思想是。

2024-02-29 16:21:19 297

原创 【Java】代码随想录栈和队列第十三天| LeetCode239 滑动窗口最大值、LeetCode347 前K个高频元素

今日内容:239. 滑动窗口最大值347.前 K 个高频元素总结。

2024-02-29 11:49:40 311

原创 【Java】代码随想录栈和队列第十一天| LeetCode20 有效的括号、LeetCode1047 删除字符串中的相邻重复项、LeetCode150 逆波兰表达式求值

我们平时使用的中缀表达式例如:4 + 13 / 5,对计算机十分不友好,转化为后缀表达式以后计算机可以利用栈来进行顺序处理,就很方便了。deque可以当栈使用(push、pop),也可以当队列使用(add、remove)(offer、poll)push进对应的下括号,然后判断空或者有不重复项时false,不然就是在重复情况下pop出重复项。思路:空或不存在重复时push,存在重复时pop出重复字母,最终留在栈中的就是非重复项。● ==与equals的区别:1. ==是一个关系运算符,对于。

2024-02-06 00:31:32 328 1

原创 【Java】代码随想录栈和队列第十天| LeetCode232 用栈实现队列、LeetCode225 用队列实现栈

今日任务:理论基础232.用栈实现队列225. 用队列实现栈。

2024-02-05 21:48:47 880 1

原创 【Java】字符串:刷题总结

● 字符串类型转换示意图对于String类型:通常转化成char[]和stringbuilder类型做题。

2024-01-29 14:59:59 350

原创 【Java】代码随想录字符串第九天| LeetCode28 实现strStr()、LeetCode459 重复的子字符串

今日任务28. 实现 strStr()459.重复的子字符串。

2024-01-29 14:36:07 385

原创 【Java】数组、集合、哈希表:刷题总结

其中HashList是其中的一个常用实现类,添加,修改,删除等操作同arraylist。其中ArrayList(大小可变数组):是接口List的一个具体实现类。总结:要看①是否范围有限②是否可能元素重复③题目要求什么。对于数组类型,数组Array是地址连续的存储结构。对于List(序列),是不连续的存储结构。无限制,要求不重复的三元组。给了限制,1000以内。

2024-01-26 17:58:57 373 1

原创 【Java】代码随想录字符串第八天| LeetCode344 反转字符串、LeetCode541 反转字符串ii、卡码网54 替换数字、LeetCode151 翻转字符串里的单词

但是记得输出的时候要用toString()转化成string形式,sb.append(),sb.insert(offset,xxx),sb.reverse()● new String(ch) 将数组转换回字符串,return new String(chars数组)● scanner的作用是读取用户输入,scanner.nextLine(),scannner.close()我自己的思路:①删除多余空格②分割字符串为数组③将数组反转。即:寻找需要移除的元素(加空格),然后元素后的数组集体前移。

2024-01-25 12:30:11 356

原创 【Java】代码随想录哈希表第七天| LeetCode454 四数相加、LeetCode383 赎金信、LeetCode15 三数之和、LeetCode18 四数之和

● 动态三元组[ [a,b,c ], [ a,b,c] ]:List res = new ArrayList();最终取符合key=a+b=0-c-d的key值,其value即个数,需要对value进行累加得到总元组个数。但是为了使三元组不重复,i不能重复,left和right也不能重复(对abc都要做出剪枝的操作)首先,返回个数,所以建立以a+b总和sum为key,以个数为value的map。●区别 arraylist数组,集合set,和映射map用的不同函数。

2024-01-23 20:16:47 362 1

原创 【Java】代码随想录哈希表第六天| LeetCode242 有效的字母异位词、LeetCode349 两个数组的交集、LeetCode202 快乐数、LeetCode1 两数之和

思路:建立两个1000大小数组结构的哈希表,再建立一个交集数组newlist用于return,由于newlist未知大小,所以只能用动态数组ArrayList,最后再转换。思路:在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中。:在map 是一个key value 的数据结构,map中,对key是有限制,对value没有限制的,因为key的存储方式使用红黑树实现的。这道题考验hashset的用法和每个位取单数的操作。

2024-01-17 21:40:22 820

原创 【Java】代码随想录链表第四天| LeetCode24 两两交换链表中的节点、LeetCode19 删除链表中第N个节点、面试02.07 链表相交、LeetCode142 环形链表ii

中,由于进行的是pre和cur之间的指针改变,只需用一个临时节点tmp保存cur.next。可知,当n=1时,x=z,即从头结点和相遇节点出发,以同样每次走一个节点的速度,二者将在。①设置临时指针②画图,更改节点指向③移动指针,进行下一步操作。,临时指针的设定则更便于第三步移动指针的操作。,快指针走两步,慢指针走一步,判断是否会相遇;LeetCode24 两两交换链表中的节点。LeetCode19 删除链表中第N个节点。思路:先计算两个链表的长度,让二者指向。24. 两两交换链表中的节点。

2024-01-14 10:17:59 403 1

原创 【Java】代码随想录链表第三天| LeetCode203 移除链表元素、LeetCode707 设计链表、LeetCode206 反转链表

● 需要注意的点:①空链表的特殊情况②及时更新指针pre和cur③存在虚拟头结点情况下,dummy.next才是新的头结点。思路:通常包含①节点存储的元素val②指向下一个节点的指针next③节点的构造函数。● 需要注意的点:①先寻找到不是val的新头结点,再判断新的头结点是不是空。● 初始化的节点即虚拟节点,设置pre和cur更加方便。(1)有虚拟头结点,有pre和cur指针。(2)无虚拟头结点,有pre和cur指针。(3)无虚拟头结点,无pre只剩cur。LeetCode203 移除链表元素。

2024-01-13 17:46:55 367 1

原创 【Java】代码随想录数组第二天| LeetCode977 有序数组的平方、LeetCode209 长度最小的字数组、LeetCode59 螺旋矩阵ii

● left从0开始,right++,sum累加循环直到满足sum>=target,确定窗口右界;index设为最大序号,再从大到小开始给新数组res赋值。思路:平方的最大项必然存在于两侧,因此考虑使用。LeetCode209 长度最小的字数组。LeetCode977 有序数组的平方。● 接着left++,缩小窗口左界。LeetCode59 螺旋矩阵ii。”,注意当n为奇数时单个不开启循环。思路:每一个for循环都遵循“(1)暴力解法(双层循环)

2024-01-13 11:40:12 376 1

原创 【Java】代码随想录数组第一天| LeetCode704 二分查找、LeetCode27 移除元素。

这道题不难,掌握开的时候middle=right,闭的时候right加减1即可(以right为例)(2)不同与cpp用nums.size()函数,Java用得是nums.length计算数组长度;举个例子: 1010 >> 1 == 0101。二分法拥有两种思路:①左闭右闭②左闭右开。(1)变量第一次出现记得声明类型int;,如果目标值存在返回下标,否则返回。LeetCode704 二分查找。LeetCode27.移除元素。下面为了快速记忆放了②的解法。题目链接:27.移除元素。思路:数组置换/前移。

2024-01-11 22:48:42 381

空空如也

空空如也

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

TA关注的人

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