自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法练习 Day41 | LeetCode343,96

通过上述分析:dp[i]+=dp[j-1]*dp[i-j],j-1为j为头结点左子树节点数量,i-j为以j为头结点右子树节点数量。当n=3时,dp[3]=元素为1作为头结点的二叉树个数+元素为2作为头结点的二叉树个数+元素为3作为头结点的二叉树个数。元素为1作为头结点的二叉树个数=右子树有2个元素的二叉树个数*左子树有0个元素的二叉树个数。元素为2作为头结点的二叉树个数=右子树有1个元素的二叉树个数*左子树有1个元素的二叉树个数。有两种方式,一种是j*(i-j)直接相乘,一种是j*dp[i-j]。

2024-02-21 16:36:51 397

原创 算法练习 Day39 | LeetCode62,63

一个是从(i-1,j)位置向下走一步,另一种是从(i,j-1)位置向右走一步,所以要到达(i,j)位置递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1]一个是从(i-1,j)位置向下走一步,另一种是从(i,j-1)位置向右走一步,所以要到达(i,j)位置递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1]dp[i][j]:表示从(0,0)到(i,j)有dp[i][j]条不同的路径。dp[i][j]:表示从(0,0)到(i,j)有dp[i][j]条不同的路径。

2024-02-06 16:07:28 845 1

原创 算法练习 Day38 | LeetCode509,70,746

由于最后一步可能是从i-1走一步到达,也可能是在i-2的位置走一步到达,所以dp[i]=dp[i-1]+cost[i-1]或者dp[i]=dp[i-2]+cost[i-2], 这两个中的最小值就是题目中需要的最低花费。公式:dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2]);dp[i]:代表爬到第i个台阶有dp[i]种不同的方法。dp[i]存放的是达到i台阶的时候所需要的最低花费。dp[i]代表第i个位置的数值是dp[i]表示)形成的序列称为。

2024-02-06 10:55:07 1327 1

原创 算法练习 Day31 | LeetCode 455,376,53

如图:当i指向第一个2的时候,preDiff>0 && curDiff =0, 当i指向第二个2的时候,preDiff = 0 && curDiff <0,如果采用删除左边三个2,那么当preDiff = 0 && curDiff <0也记录一个摆动,所以综合条件后变成为((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0))但是,每个孩子最多只能给一块饼干。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。

2024-01-31 15:07:25 764

原创 算法练习 Day27 | LeetCode 39,40,131

(2)再对树层去重,used[i - 1] == false,说明同一树层candidates[i-1]使用过。startIndex就是切割线,字符串中[startIndex,i]位置上的子串就是切割后的子串。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。(1)先排序,如果candidates中i位置和i-1位置的数据相同,则说明重复了。如果至少一个数字的被选数量不同,则两种组合是不同的。中的每个数字在每个组合中只能使用。中的每个数字在每个组合中只能使用。7 也是一个候选, 7 = 7。

2024-01-26 17:00:02 1276 1

原创 算法练习 Day25 | LeetCode 216,17

该列表不能包含相同的组合两次,组合可以以任何顺序返回。所有可能的有效组合的列表。没有其他符合的组合了。(1)递归参数及返回值。

2024-01-23 15:23:39 425 1

原创 算法练习 Day24 | LeetCode 77

path数组的大小如果达到k,就说明找到了一个子集大小为k的组合了,此时用result二维数组将path保存起来,并终止本层递归。回溯法也是一种暴力搜索法,一般用来解决组合、切割、子集、排列、棋盘等问题。LeetCode 77: 组合。(1)递归函数的返回值及参数。(1)递归函数的返回值及参数。可以利用回溯法来解决这个问题。(2)回溯函数的终止条件。(2)回溯函数的终止条件。

2024-01-23 13:58:50 440 1

原创 算法练习 Day14 | LeetCode 144,145,94

(2)完全二叉树:一颗深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这颗二叉树称为完全二叉树。(3)二叉搜索树:若它的左子树不空,则左子树上的所有结点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有结点的值均大于他的根节点的值。(4)平衡二叉搜索树:平衡二叉搜索树具有以下性质:它是一颗空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。

2024-01-16 18:01:54 346 1

原创 算法练习 Day11 | LeetCode 20,1047,150

利用栈来解决,遍历字符串,每次遍历前先判断栈中是否有这个元素,如果有则弹出,如果没有则将该元素压入栈,最后在栈中的元素就是剩余的,但是此时还是倒序,需要将字符串翻转一下。利用栈来解决,遍历字符串,当遇见左括号时,在栈中压入相对应的右开括号。当遇到右括号时,从栈中弹出进行对比,如果不匹配则说明不符合。逆波兰表达式也称为后缀表示法,比如3+4 可以写作 3 4 + ,也可以看做是二叉树的后续遍历(左右中顺序)计算过程:遇见数字就压入栈中,遇到操作符的话就从栈中弹出两个元素进行计算,计算后加入栈中,循环往复。

2024-01-15 18:12:19 328 1

原创 算法练习 Day10 | LeetCode 232,225

利用两个栈来实现,一个栈为stackIn,一个栈为stackOut,先将元素按照顺序压入stackIn中,然后依次弹出再压入stackOut中,再依次将元素弹出,这样就能实现一个队列的需求了。队列: 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First in First out)利用一个队列实现,具体思路是将队列中最后一个元素之前的元素全都弹出,然后再重新压入队列中。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(

2024-01-12 11:10:54 994 1

原创 算法练习 Day4 | LeetCode 24,19,面试题02.07,142

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。(1)需要创建两个临时节点,一个存储cur.next节点,一个存储cur.next.next.next节点。(1)利用快慢指针来解决,fast指针一次走两步,slow指针一次走一步,如果有环则两个指针必会相遇。创建一个虚拟链表,slow指针指向dummy,fast指针指向fast。(4)这样移动之后,当fast指针移动到最后时,slow指针指向的节点就是应该删除的节点。(4)循环两个链表,终止条件为两个链表相同,此时的链表就是相交的部分。

2024-01-10 16:08:26 906 1

原创 算法练习 Day3 | LeetCode 203,707,206

以指示链表中的上一个节点。假设链表中的所有节点下标从。你可以选择使用单链表或者双链表,设计并实现自己的链表。LeetCode 203: 移除链表元素。LeetCode 707: 设计链表。LeetCode 206: 反转链表。,请你反转链表,并返回反转后的链表。是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。,请你删除链表中所有满足。总结:多多练习吧,哎。给你一个链表的头节点。

2024-01-09 13:53:27 355

原创 算法练习 Day6 | LeetCode 242,349,202,1

(1)创建结果数组,题目中给定的是小写字母,一共26个,所以定义数组时数组长度为26,但是,数组中同一个元素在答案里不能重复出现。(3)遍历两个临时数组,如果在相同的位置都大于0,则说明两个数组中都存在这个值。(2)遍历第一个字符串,字母出现后在数组中对应位置加1。(3)遍历第二个字符串,字母出现后在数组中对应位置减1。(2)遍历两个数组,如果数据出现一次则在对应的位置加1。(2)如果和存在重复,则会陷入无限循环,不可能变为1。(4)遍历结果数组,如果全都为0说明是字母异位词。整数,并返回它们的数组下标。

2024-01-08 15:25:03 323

原创 算法练习 Day2 | LeetCode 977,209,59

解题思路:利用双指针,题目中给出的是有序数组,所以最大值不是在数组的最左侧就是在数组的最右侧,所以定义一左一右两个指针,如果左侧的平方大于右侧算出的平方数,则结果数组位置处为左侧数据平方,左指针向右移动一位,反之,则数组位置处为右侧数据平方,右指针向左移动一位。2.窗口的起始位置何时移动:当前窗口中的和≥target了,就可以向前移动,同时将窗口中sum值减去。解题思路:这道题重点在边界问题的处理,采用的是左闭右开。3.窗口的终止位置何时移动:终止位置就是循环中的索引。个正整数的数组和一个正整数。

2024-01-02 19:47:07 470

原创 算法练习 Day1 | LeetCode 704,27

解题思路:利用二分查找法,有两种形式,一种左闭右闭,一种左闭右开,需要注意两种形式的边界问题。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。不要使用额外的数组空间,你必须仅使用。,如果目标值存在返回下标,否则返回。总结:在运用二分法时需要注意边界问题。总结:快慢指针在数组及链表中应用较多。的元素,并返回移除后数组的新长度。个元素有序的(升序)整型数组。解题思路:利用快慢指针进行解题。

2023-12-27 19:59:28 413 1

空空如也

空空如也

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

TA关注的人

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