#算法练习#代码随想录训练营
文章平均质量分 92
力扣题目的练习
console
写笔记
展开
-
动态规划day.2
题目描述:一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?283从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下2862 * 109思路代码。原创 2024-05-08 15:33:53 · 993 阅读 · 0 评论 -
动态规划day.1
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。n = 21n = 32思路:确定dp数组(dp table)以及下标的含义,dp是一个一维或者二维的用来做状态转移的数组,dp[i]代表着第i个斐波那契数值为dp[i]确定递推公式dp数组如何初始化,根据题目描述进行初始化,dp[0] = 1 , dp[1] = 1确定遍历顺序。原创 2024-05-08 10:46:54 · 1108 阅读 · 0 评论 -
贪心算法day.6
题目描述:当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是的。给定一个整数n,返回小于或等于n的最大数字,且数字呈。原创 2024-04-24 18:53:46 · 498 阅读 · 0 评论 -
贪心算法练习day.5
题目描述:给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。1移除 [1,3] 后,剩下的区间没有重叠。2你需要移除两个 [1,2] 来使剩下的区间没有重叠。0你不需要移除任何区间,因为它们已经是无重叠的了。先对区间进行排序,让区间尽可能的重叠,这就是局部最优,当发现区间不重叠时什么也不做,当发现区间重叠时,更新重叠区间的最小右区间,并且记录要删除的区间,为了下一次的区间比较,看看是否有联系重叠的情况。原创 2024-04-24 17:23:31 · 1112 阅读 · 0 评论 -
贪心算法练习day.4
题目描述:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付5美元。注意,一开始你手头没有任何零钱。给你一个整数数组bills,其中bills[i]是第i位顾客付的账。如果你能给每位顾客正确找零,返回true,否则返回false。true前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。原创 2024-04-24 15:37:04 · 590 阅读 · 0 评论 -
贪心算法练习day.3
题目描述:给你一个整数数组nums和一个整数kinums[i]-nums[i]重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组。5选择下标 1 ,nums 变为 [4,-2,3]。6选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。13选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。原创 2024-04-23 18:49:15 · 950 阅读 · 0 评论 -
贪心算法练习day.2
题目描述:给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。原创 2024-04-23 15:33:49 · 741 阅读 · 1 评论 -
贪心算法练习day.1
贪心算法是一种常见的解决优化问题的方法,其基本思想就是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部的最优决策,以此得到全局的最优解,例如在十张面额不同的钞票,让我们去取5张,那如何拿到最多的钱呢?那我们每次取钞票时只需要取出面额最大的一张(局部最优),最后拿到的就是最多的钱(全局最优),这就是贪心的策略贪心算法优点和局限性:优点:操作直接,实现简单,效率高局限性:有时候并不能找到最优解,即无法保证能找到最优解,可能找到较差的解贪心算法主要适用于以下两种情况。原创 2024-04-23 14:05:24 · 2603 阅读 · 1 评论 -
回溯算法练习day.6
题目描述:按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的的解决方案。每一种解法包含一个不同的的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。n = 4如上图所示,4 皇后问题存在两个不同的解法。n = 1[["Q"]]思路:使用回溯算法来遍历出所有的结果,首先抽象为树形结构,以n为3为例。原创 2024-04-22 10:13:25 · 1075 阅读 · 0 评论 -
回溯算法练习day.5
题目描述:给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中。你可以按返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。[[4,4]]因为是求组合问题,因此使用回溯算法,就可以抽象出树形结构,如下所示。原创 2024-04-21 20:00:30 · 870 阅读 · 0 评论 -
回溯算法练习day.4
正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s,用以表示一个 IP 地址,返回所有可能的,这些地址可以通过在s中插入'.'来形成。你重新排序或删除s中的任何数字。你可以按顺序返回答案。s = "0000"思路:因为是分割问题,因此可以使用回溯算法解决,我们可以将其抽象为一个树形结构。原创 2024-04-21 16:59:13 · 1192 阅读 · 0 评论 -
回溯算法练习day.3
题目描述:给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。[2,3,6,7],target =72 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。原创 2024-04-20 19:58:31 · 1198 阅读 · 0 评论 -
回溯算法练习day.2
我们可以根据抽象的树形结构可知,符合要求的组合的长度与题目传入的字符串的长度一致,并且我们可以将题目给出的数字映射到一个数组中,数组的下标就是对应的数字,存储的值就是数字对应的字符串,for循环就是横向遍历,而递归是纵向遍历。因为是求组合问题,因此可以使用回溯算法解决,我们以题目的示例1为例,将其抽象为一颗树形的结构,即如下所示。当我们遍历到的值已经大于我们的目标值时,我们可以直接进行回溯,而不需要再进行遍历。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。原创 2024-04-15 20:33:52 · 418 阅读 · 0 评论 -
回溯算法练习day.1
回溯法的作用递归函数与回溯算法是相辅相成的,回溯法往往在递归函数的“下面”使用原因:有些问题无法暴力进行搜索,只能通过回溯法来解决,例如1.组合问题2.切割问题3.子集问题4.排列问题5.棋盘问题回溯算法是一种效率很低的算法理解回溯法。原创 2024-04-14 15:05:51 · 912 阅读 · 0 评论 -
二叉树练习day.9
题目描述:给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在中。修剪树改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。原创 2024-04-13 17:36:01 · 1027 阅读 · 0 评论 -
二叉树练习day.8
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(3节点5和节点1的最近公共祖先是节点3。5节点5和节点4的最近公共祖先是节点5。因为根据定义最近公共祖先节点可以为节点本身。1[2, 105]Node.val互不相同p!原创 2024-04-13 16:13:23 · 858 阅读 · 0 评论 -
二叉树练习day.7
题目描述:给你一个二叉搜索树的根节点root,返回。差值是一个正数,其数值等于两值之差的绝对值。原创 2024-04-11 18:53:28 · 1096 阅读 · 0 评论 -
二叉树练习day.6
题目描述:给定一个不重复的整数数组nums。可以用下面的算法从numsnums返回 nums构建的最大二叉树。递归调用如下所示:- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- 空数组,无子节点。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- 空数组,无子节点。- 只有一个元素,所以子节点是一个值为 1 的节点。原创 2024-04-11 15:24:30 · 828 阅读 · 0 评论 -
二叉树练习day.5
题目描述:给定一个二叉树的root,请找出该二叉树的节点的值。假设二叉树中至少有一个节点。17思路:找到深度最大的叶子节点,注意,该节点不一定是左节点,因为我们要求的是最后一行最左侧的值,只需要找到最大的深度就可以,并且这里使用前中后序遍历都可以实现,因此优先都会遍历左节点才到右节点实现:1.定义一个全局变量,用来记录二叉树的最大深度,并初始化为一个不可能到达的最小值,再定义一个变量,记录深度最大的值2.实现递归的三部曲。原创 2024-04-10 09:20:57 · 793 阅读 · 0 评论 -
二叉树练习day.4
题目描述:给定一个二叉树,判断它是否是平衡二叉树truefalseroot = []true[0, 5000]平衡二叉树:该二叉树中任意一个节点的左右子树的高度差不超过1实现思路:因为我们要求的是二叉树中节点的高度,因此需要使用后序遍历,因为后序遍历是将左右孩子的情况返回给父节点,父节点再根据左右孩子的高度再+1,层层往上返回,因此求的是高度,而前序遍历是由上到下去遍历,因此求解的是深度使用递归来实现:1.确定函数的参数和返回值,传入的应该是根结点,返回值是左右子树的高度。原创 2024-04-08 19:24:02 · 1103 阅读 · 0 评论 -
二叉树练习day.3
题目描述:给定一个二叉树root,返回其最大深度。二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。32[0, 104]通过根节点高度(根节点的高度使用后序遍历)来求出二叉树的最大深度,使用递归实现1.确定函数的参数和返回值,参数应该是二叉树的根节点,返回值应该是其高度2.确定终止条件,此时终止条件应该为当前的节点为空3.确定单层递归逻辑,先计算左节点的高度并返回,计算右节点的高度并返回。原创 2024-04-08 17:05:20 · 1241 阅读 · 0 评论 -
二叉树练习day.2
题目描述:给你二叉树的根节点root,返回其节点值的。(即逐层地,从左到右访问所有节点)。root = [1][[1]]root = [][][0, 2000]思路:使用队列来实现,先将当前层的节点存储到队列中,并记录当前层的节点的数量,再根据当前层节点的数量将当前层的元素弹出,因此队列中的元素是在不断变化的,需要根据每一层的节点数量情况来选择弹出的元素。原创 2024-04-05 19:36:23 · 842 阅读 · 0 评论 -
二叉树练习day.1
链接:144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后序遍历。原创 2024-04-03 19:22:13 · 629 阅读 · 0 评论 -
队列与栈练习day.2
题目描述:给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。s = "()"truetrues = "(]"false'()[]{}'思路:括号不匹配的情况分为3种:多了左括号括号不匹配多了右括号实现括号匹配的方法:1.遇到左括号则入栈,遇到由括号则出栈。原创 2024-03-31 14:57:40 · 947 阅读 · 0 评论 -
Hello 算法学习--哈希表实现(C语言)
跟随Hello算法这本书使用C语言来实现了数组的哈希,理解了哈希的原理已经工作的方式,了解了哈希冲突发生的原因以及解决的办法,但使用的还不够熟练,而且没有进行解决哈希冲突的代码实现,需要进行补充学习。原创 2024-03-28 17:01:09 · 1039 阅读 · 0 评论 -
队列与栈练习day.1
如果新栈不为空,直接就从新栈里依次取出元素,如果新栈为空,则将旧栈的依次出栈放入新栈里,取出新栈中的栈顶元素并更新新栈的栈顶元素指针,之后再将新栈中的内容存放到旧栈里,返回保留的新栈栈顶元素,就可以使用两个栈来实现队列的操作。那么如果要使用栈来实现队列,就是需要改变出栈的顺序,因此就需要一个额外的栈,将原来的栈的元素再依次放入另外一个栈中,就可以使用栈来实现队列,即先入先出。可以只使用一个队列来实现,即假如队列有n个元素,则将n-1元素先弹出再重复加入队列,就可以只使用一个队列来实现栈的操作。原创 2024-03-29 10:55:04 · 828 阅读 · 0 评论 -
字符串算法练习day.2(KMP算法)
KMP算法的学习及例题记录原创 2024-03-28 13:03:12 · 1417 阅读 · 0 评论 -
997.有序数组的平方和
题目描述:给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]原创 2024-03-21 19:56:42 · 714 阅读 · 0 评论 -
链表算法练习day.2
两两交换链表中的结点删除链表的倒数第n个结点相交链表环形链表原创 2024-03-23 18:29:19 · 680 阅读 · 0 评论 -
链表算法练习day.1
1.特殊情况,先判断头结点的是不是我们要删除的结点,如果头结点是我们要删除的结点,那么只要头结点不为空,我们就不断更新头结点的位置,由于是使用C语言来实现的,因此需要手动地去释放点原头结点所占用的内存空间。思路:要移除一个结点,那么就必须找到它的前驱点,改变其前驱点的指向,来删除这一个元素,如果要删除的结点为头结点,那么就要更新头结点的位置,再释放掉原来的结点。2.让一个指针pre指向链表的头,使用这个指针来遍历链表,如果查找到要删除的结点,则进行链表删除操作,否则更新当前指针的位置,不断遍历链表。原创 2024-03-22 19:39:28 · 569 阅读 · 0 评论 -
209.长度最小的子数组
题目描述:给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。2子数组[4,3]是该条件下的长度最小的子数组。10。原创 2024-03-21 20:56:52 · 374 阅读 · 0 评论 -
字符串算法练习day.1
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。先进行数组空间的扩充,即将数字替换为number后需要的空间的大小,再由后往前的依次填充number,使用双指针来进行替换,一个指针指向新长度的末尾,一个指针指向旧长度的末尾,再整体向前填充。使用双指针的方法,直接让一个指针指向数组首元素,再让一个指针指向数组末尾元素,改变两个指针位置的值实现交换,依次更新两个指针的位置,直到实现数组元素的全部交换。是由非空格字符组成的字符串。原创 2024-03-27 17:18:51 · 1066 阅读 · 0 评论