- 博客(40)
- 收藏
- 关注
原创 代码随想录第四十八天|198、213、337.打家劫舍
如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。从dp[i]的定义上来讲,dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(nums[0], nums[1]);然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])。
2023-07-31 13:50:00 404
原创 代码随想录第四十五天|322.零钱兑换、279.完全平方数
凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。
2023-07-21 10:54:43 188
原创 代码随想录第四十四天|完全背包理论基础、518零钱兑换、377组合总和
第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。01背包和完全背包唯一不同就是体现在遍历顺序上,完全背包的物品是可以添加多次的,所以要从小到大去遍历。给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)。dp[i]: 凑成目标正整数为i的排列个数为dp[i]。dp[j]:凑成总金额j的货币组合数为dp[j]。
2023-07-20 11:06:17 184
原创 代码随想录第四十三天|1049.最后一块石头的重量、494.目标和、474.一和零
从递推公式可以看出,在初始化的时候dp[0] 一定要初始化为1,因为dp[0]是在公式中一切递推结果的起源,如果dp[0]是0的话,递推结果将都是0。假设石头的重量分别为 x 和 y,且 x <= y。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。只要搞到nums[i],凑成dp[j]就有dp[j - nums[i]] 种方法。dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法。dp[j]表示容量为j的背包,最多可以背最多重量为dp[j].
2023-07-20 09:58:02 159
原创 代码随想录第四十二天|01背包问题
2.不放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);先遍历背包,再遍历物品,也是可以的。
2023-07-18 11:44:35 61
原创 代码随想录第四十一天|343.整数拆分、96.不同的二叉搜索树
dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。dp[3]=元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。
2023-07-17 10:18:41 42
原创 代码随想录第三十九天|62.不同路径、63.不同路径②
为从(0, 0)的位置到(i, 0)的路径只有一条,所以dp[i][0]一定为1,dp[0][j]也同理。但如果(i, 0) 这条边有了障碍之后,障碍之后(包括障碍)都是走不到的位置了,所以障碍之后的dp[i][0]应该还是初始值0。要求dp[i,j]只有两个方向求得:dp[i-1][j]、dp[i][j-1]。要求dp[i,j]只有两个方向求得:dp[i-1][j]、dp[i][j-1]。dp数组代表从(0,0)出发到(i,j)有多少种路径;dp[i][0]、dp[0][j]都应该为1;
2023-07-15 10:17:25 125
原创 代码随想录第三十八天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。5)举例推导dp数组。
2023-07-14 10:31:11 56
原创 代码随想录第三十七天|738.单调递增的数字、968.监控二叉树
例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。如果是以下情况,其实就是 左右孩子节点有一个有摄像头了,那么其父节点就应该是2(覆盖的状态)从低到上,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点。左孩子有覆盖,右孩子有覆盖,那么此时中间节点应该就是无覆盖的状态了。情况2:左右节点至少有一个无覆盖的情况。
2023-07-13 10:26:37 35
原创 代码随想录第三十六天|435.无重叠区间、763.划分字母区间、56.合并区间
即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。首先按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数。从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。先排序,让所有的相邻区间尽可能的重叠在一起,按照左边界从小到大排序之后,如果。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。给出一个区间的集合,请合并所有重叠的区间。
2023-07-12 10:59:24 41
原创 代码随想录第三十五天|806.柠檬水找零、406.根据身高建队列、452.用最少数量的弓箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。给你一个数组 points ,其中 points [i] = [xstart,xend] ,返回引爆所有气球所必须射出的最小弓箭数。
2023-07-11 11:21:45 37
原创 代码随想录第三十四天|1005.K次取反后最大化的数组和、134.加油站
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。若K多了令绝对值最小的数来回改变。在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。以这种方式修改数组后,返回数组可能的最大和。
2023-07-10 12:20:23 37
原创 代码随想录第三十二天|122.买卖股票的最佳时机、55.跳跃游戏、45.跳跃游戏②
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。你的目标是使用最少的跳跃次数到达数组的最后一个位置。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
2023-07-10 12:12:22 147
原创 代码随想录第三十一天|455.分发饼干、376.摆动序列、53.最大子数组和
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。从后向前遍历胃口数组,大饼干满足胃口大的,并统计小孩数量。贪心本质为选择每一阶段的局部最优,从而达到全面最优。
2023-07-07 12:17:15 40
原创 代码随想录第三十天|回溯算法总结
因此当used为false,且下一位置元素与该位置元素相等,说明是树层间元素重复,需要去重(下一位置操作应该跳出循环),当used为true,且下一位置元素与当前位置元素重复说明是树枝元素数值重复,无需去重。④中candidates数组有重复元素并且每个元素只能使用一次,因此在进行回溯时需要去重,该去重是对同一树层进行去重,但同一树枝不用进行去重(因为所求数组中可以出现两个相同的元素,因为candidates中可能包含数值相同但不是同一个的元素)。①和②的截止条件都为path的个数为k。
2023-07-06 12:27:33 102
原创 代码随想录第二十九天|491.递增子序列、46.全排列、47.全排列②
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。给定一个 没有重复 数字的序列,返回其所有可能的全排列。自己写的,不知道为啥错?
2023-07-05 11:27:14 41
原创 代码随想录第二十八天|93.复原IP地址、78.子集、90.子集②
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
2023-07-04 11:18:19 35
原创 代码随想录第二十七天|39.组合总和、40.组合总和②、131.分割回文串
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。candidates 中的数字可以无限制重复被选取。1)利用used数组,对其进行树层去重。
2023-07-03 11:08:04 56
原创 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。17.电话号码的字母组合。
2023-07-01 15:53:08 55
原创 代码随想录第二十四天|回溯算法理论、77.组合
回溯算法是一个类似枚举的搜索尝试过程,主要在搜索尝试中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试别的路径。给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。for循环代表横向遍历,backtracking代表纵向遍历。n作为横向遍历,k作为纵向遍历。
2023-06-30 10:49:19 107
原创 代码随想录第二十三天|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。相当于将二叉树转换为有序数组后,从后向前依次累加,等价于反中序遍历二叉树,然后顺序累加。将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
2023-06-29 10:49:31 62 1
原创 代码随想录第二十二天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。
2023-06-28 16:00:55 95 1
原创 代码随想录第二十一天|503.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。简化:在二叉搜索树中序遍历的过程中,也可以直接计算。503.二叉搜索树的最小绝对差。
2023-06-27 12:41:17 83 1
原创 代码随想录第二十天|654.最大二叉树、617.合并二叉树、700二叉搜索树中的搜索、验证二叉搜索数
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给定二叉搜索树(BST)的根节点和一个值。你需要在BST中找到节点值等于给定值的节点。首先找到最大值以及最大值的下标,利用最大值构造节点,下标进行进一步分割。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。通过给定的数组构建最大二叉树,并且输出这个树的根节点。给定一个二叉树,判断其是否是一个有效的二叉搜索树。
2023-06-26 17:44:41 75 1
原创 代码随想录第十八天|513.找树左下角的值、112.路径总和、106.从中序与后序遍历序列构造二叉树
以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素就是节点元素。给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。给定一个二叉树,在树的最后一行找到最左边的值。根据一棵树的中序遍历与后序遍历构造二叉树。说明: 叶子节点是指没有子节点的节点。说明: 叶子节点是指没有子节点的节点。
2023-06-25 13:06:51 101 1
原创 代码随想录第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定一个二叉树,返回所有从根节点到叶子节点的路径。给定一个二叉树,判断它是否是高度平衡的二叉树。说明: 叶子节点是指没有子节点的节点。计算给定二叉树的所有左叶子之和。257.二叉树的所有路径。利用回溯算法进行操作。
2023-06-23 10:36:08 72 1
原创 代码随想录第十六天|104、二叉树的最大深度,111、二叉树的最小深度、222.完全二叉树的节点个数
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或节点数。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或节点数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。1)满二叉树,直接计算2^树的深度-1,。给出一个完全二叉树,求出该树的节点个数。根节点的高度就是二叉树的最大深度。叶子节点是指没有子节点的节点。叶子节点是指没有子节点的节点。222.完全二叉树的节点个数。
2023-06-23 09:27:05 67 1
原创 代码随想录第十四天|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历
除了最底层结点没填满外,其余每层节点数都达到最大值,并且最下面一层的结点都集中在该层最左边的若干位置(当深度为k时,最底层有1~2^(k-1)个节点)。二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,这颗二叉树称为满二叉树。二叉树是结点的一个有限集合,该集合或为空,或是由一个根节点加上两颗分别为左右子树的二叉树组成。若它的左子树不为空,则左子树上的所有结点的值均小于它的根节点的值。若它的右子树不为空。则右子树上的所有结点的值均大于它的根节点的值。它的左右子树也都为二叉排序树。
2023-06-21 10:32:00 52
原创 代码随想录第十三天|239.滑动窗口最大值、347.前k个高频元素
priority_queue<Type, Container, Functional> ,priority_queue属于是容器适配器,需要指定底层的容器,所以第一个参数Type是queue里面存的数据的类型,第二个参数Container是要使用的底层容器(一般是vector),Functional 就是比较的方式(准确来说应该是比较方式的类型).给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
2023-06-19 13:13:22 145
原创 代码随想录第十一天|20.有效的括号、1047.删除字符串中的所有相邻重复项、150.逆波兰表达式求值
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。有效的运算符包括 + , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。根据 逆波兰表示法,求表达式的值。
2023-06-17 13:08:36 33 1
原创 代码随想录第十天|232.用栈实现队列、225.用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(、、 和 )。push(x):进栈(栈的插入操作),若栈未满,则将x加入使之成为新栈顶元素。pop():出栈(栈的删除操作),若栈非空,则弹出栈顶元素,并用x返回。队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。push(x):入队,若队列未满,将x加入,使之称为队尾。top():栈顶元素,若栈非空,返回栈顶元素。pop():出队,若队列非空,则弹出队首元素。栈底:固定的,不允许进行插入和删除的另一端。
2023-06-16 12:50:29 27 1
原创 代码随想录第九天|28.实现strStr()、459.重复的子字符串
记录下标i(包括i)的字符中,有多大长度的相同前后缀。s[i]与s[j+1]相等,同时向后移动i和j,说明找到相同的前后缀,同时需要将j的长度赋值给next[i]。则可建立s+s构成新的字符串,后面的子串做前串,前面的子串做后串,还可构成一个s。因此,只要s是由重复子串组成,拼接在一起则可找到s,但需除去s+s的开头与结尾。当一个字符串内部由重复的字符串组成,则字符串的结构一定是由前后相同的子串组成。s[i]与s[j+1]不相等,需找到j在next数组里的值next[j]。2)处理前后缀不相等的情况。
2023-06-15 11:03:24 61 1
原创 代码随想录第八天|344.反转字符串、541.反转字符串②、剑指offer 05.替换空格、151.反转字符串里的单词、剑指offer58 左旋转字符串
首先数出字符串中空格的数量k,使原有字符串扩增2k,利用双指针办法,一个指针指向原有字符串末端,一个指针指向开辟后的字符串末端,从后向前遍历,若遇到空格赋值20%,否则赋值原有字符,直至到第一个字符。利用双指针方法,一个指针指向首段、一个指针指向末端,将两者进行交换,随后首段指针+1,尾端指针-1,直至两指针重合或首段大于尾端。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。给你一个字符串s,请你反转字符串中 单词 的顺序。
2023-06-14 13:07:02 34
原创 代码随想录第七天|454.四数相加、383.赎金信、15.三数之和、18、四数之和
如果nums[i]+nums[left]+nums[right]>0,则移动right向前,如果nums[i]+nums[left]+nums[right]<0,则移动left向后。给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?首先需定义一unordered_map,遍历前两个数组,求两数组元素之和,将两数之和放入key中,两数之和出现的次数放入value中。
2023-06-13 12:38:37 200 1
原创 代码随想录第六天|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
key是不可以重复的。当要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。(insert:在set中插入元素x,实际插入的为<x,x>,若插入成功,返回<x在set中的位置,true>;哈西函数:将数据的关键字作为自变量,通过一定的函数关系(哈希函数),计算出的值作为该元素的存储地址。数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
2023-06-12 12:18:20 427
原创 代码随想录第四天|24.两两交换链表中的节点、19、删除链表的倒数第N个节点、面试题02.07.链表相交、142环形链表②
相遇时,slow走x+y,fast走x+y+n(y+z) ,fast走的是slow的二倍,故(x+y)*2=x+y+n(y+z) —>x+y=n(y+z) —>x=(n-1)(y+z)+z。当n=1时,x=z,表明,从头节点出发一指针,相遇节点出发一指针,两者相遇的节点即为环入口节点。首先需要判断链表是否有环,分别定义fast和slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次只移动一个节点,若两指针在途中相遇说明链表有环。如果链表无环,则返回 null。
2023-06-11 16:43:50 492 1
原创 代码随想录第三天|203.移除链表元素、206.反转列表
链表为通过指针串联在一起的线性结构,每个节点由两部分构成:数据域、指针域。入口节点称为链表头结点(head),最后一个节点的指针域指向NULL。单链表:指针域只能指向节点的下一个节点。双链表:每个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。循环列表:链表首尾相连,用来解决约瑟夫环问题。链表是通过指针域的指针连接在内存中各个节点。链表中节点在内存中不是连续分配,而是散落在内存中的某地址上,分配机制取决于操作系统的内存管理。删除节点最后要手动删除D。添加节点。
2023-06-09 16:05:41 726 2
原创 代码随想录第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
例209题,通过一个for循环完成滑动窗口,for循环中的变量为窗口结束位置,当和大于目标值后将滑动窗口起始位置向后移动,可通过一个for循环控制滑动窗口。(连续的子数组的和大于等于目标值,求包含元素个数最小的子数组)给你一个按非递减顺序 排序的整数数组 ,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。给你一个正整数 ,生成一个包含n到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。找出该数组中满足其和的长度最小的连续子数组,并返回其长度。数组内存空间的地址是连续的。
2023-06-08 13:16:46 757 1
原创 代码随想录第一天|704.二分查找、27.移除元素
给定一个 个元素有序的(升序)整型数组 和一个目标值 ,写一个函数搜索 中的 ,如果目标值存在返回下标,否则返回。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。给你一个按照非递减顺序排列的整数数组 ,和一个目标值。请你找出给定目标值在数组中的开始位置和结束位置。给你一个数组 和一个值 ,你需要移除所有数值等于 的元素,并返回移除后数组的新长度。34.在排序数组中查找元素的第一个和最后一个位置。
2023-06-07 15:39:58 936
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人