算法练习
文章平均质量分 83
Java
奈川直子
Voiceless Screaming
展开
-
day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III
偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。你是一个专业的小偷,计划偷窃沿街的房屋。你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。,一夜之内能够偷窃到的最高金额。原创 2023-03-07 20:42:06 · 235 阅读 · 0 评论 -
day39|139.单词拆分 背包问题ending
字符串为背包,单词为物品,截字符串(j-len,j)看是否是一个单词,并且他的前序子串也是一个或多个单词,也就是判断是否为true。因为 "applepenapple"可以由 "apple" "pen" "apple" 拼接成。返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。初始化dp[0]=true,否则所有都为false。注意,你可以重复使用字典中的单词。完全背包,重复利用物品,且为排列数。原创 2023-03-03 21:44:51 · 793 阅读 · 0 评论 -
day38|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数
本题要求是排列数,{2,1}和{1,2}是两种方法,所以先遍历背包。列排序中,阶数1和阶数2都在同层出现,所以会出现{1,2}和{2,1},为排列数。1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶。选出最少的物品数,用min方法,比较上一个物品的dp[j]和需要凑齐本次的物品数+1。选出最少的物品数,用min方法,比较上一个物品的dp[j]和需要凑齐本次的物品数+1。,表示不同面额的硬币;本题为组合数,先遍历物品,再遍历背包。本题为组合数,先遍历物品,再遍历背包。原创 2023-03-02 13:10:11 · 285 阅读 · 0 评论 -
day37|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ 复健运动
例如:coins[2]的价值为5,当遍历到i=2,j=5时,此时dp[5]的值来自上一层coins[1]的dp[5]和本层价值5+价值5所需凑齐到总金额的数,也就是dp[5]=dp[5]+dp[0]所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) 请注意,顺序不同的序列被视作不同的组合。先遍历价值为1的物品,再遍历价值为2的物品,在一行排序中有先有后,所以只会出现{1,2},不会出现{2,1},所以为组合数。原创 2023-02-28 14:47:56 · 323 阅读 · 0 评论 -
day36|1049. 最后一块石头的重量 II、494. 目标和、474.一和零
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x原创 2023-02-12 22:44:27 · 288 阅读 · 0 评论 -
day35|01背包问题、416. 分割等和子集
如果装该物品,则背包容量= g[10-6] = g[4] + 9 ,也就是 g[10] = g[4] + 6 ,这里的6显然就是新进来的物品的价值,g[10]就是新记录的,对应二维数组里下一层的值,而这里的g[4]是对应二维数组里上一层的值,通俗的来讲:你要找到上一层也就是上一状态下 背包容量为4时的能装的最大价值,用它来更新下一层的这一状态,也就是加入了价值为9的物品的新状态。即将进来的物品重量为6。dp[i][j]:在下标[0,i]的物品任取,放进容量为j的背包,价值总和最大是多少。原创 2023-02-11 01:01:04 · 424 阅读 · 0 评论 -
day34|343. 整数拆分、96.不同的二叉搜索树
1为头节点时,右子树有两个节点,布局和n=2时两棵树的布局一样(不关心数值,只关心布局)2为头节点时,左子树有一个节点,右子树有一个节点,布局和n=1时一样3为头节点时,左子树有两个节点,布局和n=2时两棵树的布局一样dp[3]就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有原创 2023-02-09 20:11:58 · 375 阅读 · 0 评论 -
day33|62.不同路径、63. 不同路径 II
dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右、从上到下遍历。dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右、从上到下遍历。求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。原创 2023-02-08 17:07:32 · 556 阅读 · 0 评论 -
day32|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。dp=death people 它说要教我做人
选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,再一步跳两个台阶就是dp[i]。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,再一步跳一个台阶就是dp[i]。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。所以dp[i] = dp[i - 1] + dp[i - 2]。原创 2023-02-08 00:28:27 · 286 阅读 · 0 评论 -
day31|738.单调递增的数字。贪心终于摆完了,扔了两道题,我像是依托答辩orz
局部最优:遇到chars[i] > chars[i+1]的情况,让chars[i]-,然后chars[i+1]为9,可以保证这两位变成最大单调递增整数。但这里局部最优推出全局最优,还需要其他条件,即遍历顺序,和。例如332,最小的单调递增数为329->299。全局最优:得到小于等于N的最大单调递增的整数。当且仅当每个相邻位数上的数字。的最大数字,且数字呈。时,我们称这个整数是。原创 2023-02-07 16:24:04 · 74 阅读 · 0 评论 -
day30|435. 无重叠区间、763.划分字母区间、56. 合并区间
像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。的区间,所以从左向右遍历,留给下一个区间的空间大一些,从而尽量避免交叉。返回 需要移除区间的最小数量,使剩余区间互不重叠。你需要移除两个 [1,2] 来使剩下的区间没有重叠。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。移除 [1,3] 后,剩下的区间没有重叠。返回一个表示每个字符串片段的长度的列表。区间的个数就是需要移除的区间个数了。原创 2023-02-05 23:50:17 · 211 阅读 · 0 评论 -
day29|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。原创 2023-02-05 00:23:39 · 89 阅读 · 0 评论 -
day28|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。原创 2023-02-04 01:20:44 · 419 阅读 · 0 评论 -
day27|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。原创 2023-02-02 00:38:43 · 56 阅读 · 0 评论 -
day26|455.分发饼干、376. 摆动序列、53. 最大子序和。进军贪心
在计算是否有峰值的时候,计算prediff与curdiff,如果(prediff0)或者(prediff>=0&&curdiff原创 2023-02-01 17:43:02 · 402 阅读 · 0 评论 -
day25|51.N皇后、37.解数独
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 个皇后放置在 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 和 分别代表了皇后和空位。示例 1:示例 2: 问题分析:1、递归函数参数定义全局变量二维数组result来记录最终结果。参数n是棋盘的大小,然后用row来记录当前遍历到棋盘的第几层了。2、递归终止条件当递归到棋盘最底原创 2023-01-29 22:31:33 · 307 阅读 · 0 评论 -
day24|491.递增子序列、46.全排列、47.全排列 II
本题不用startIndex,因为元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。①如果单层遍历到第二个数字之后(path里已经有数字了)如果比当前path中最后一个数字小,就不是递增子序列,就继续向树层后遍历。②如果树层出现过遍历到的数字,就继续向树层后遍历(用getOrDefault方法)数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,找出并返回所有该数组中不同的递增子序列,递增子序列中。原创 2023-01-28 20:59:09 · 720 阅读 · 1 评论 -
day23|93.复原IP地址、78.子集、90.子集II
循环中 [startIndex, i] 这个区间就是截取的子串,需要判断这个子串是否合法。递归调用时,下一层递归的startIndex要从i+2开始(因为需要在字符串中加入了分隔符。一开始写成了 if (i>0&&nums[i]==nums[i-1])结果报错,问了大佬们。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。字符串s,分割线startIndex,逗点记录pointsum。),同时记录分割符的数量pointnum 要 +1。,用以表示一个 IP 地址,返回所有可能的。原创 2023-01-27 22:21:41 · 366 阅读 · 0 评论 -
day22|39. 组合总和、40.组合总和II、131.分割回文串
2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。如果至少一个数字的被选数量不同,则两种组合是不同的。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。原创 2023-01-26 16:21:38 · 822 阅读 · 1 评论 -
day21|216.组合总和III、17.电话号码的字母组合
i到9一共有9-i+1个元素,而当前还需要k-path.size()个元素,所以必须满足9-i+1>=k-path.size(),移项就可以得到i 1,没有有效的组合。的字符串,返回所有它能表示的字母组合。原创 2023-01-25 22:44:22 · 771 阅读 · 0 评论 -
day20|77. 组合。回溯的开始
例如,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。本题参数为:n(数的范围是[1-n])、k(k个数为一组)、startIndex(记录当前层搜索开始的位置,初始为1),类型都为int。在集合n中至多要从该起始位置 : i原创 2023-01-25 16:52:36 · 594 阅读 · 0 评论 -
二叉树专题汇总
一刷:9day,还是比较菜狗的。原创 2023-01-21 23:29:53 · 1354 阅读 · 0 评论 -
day19|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
当删除0后,需要继续向右子树遍历,不能直接return root.right,因为可能会有比low小的节点1也直接返回给了7的左子树方向。改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。当遍历到节点不在范围内,需删除。此时不能return null,而是要继续遍历此节点的子树。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。通过修剪二叉搜索树,使得所有节点的值在。给你二叉搜索树的根节点。原创 2023-01-20 22:50:08 · 824 阅读 · 0 评论 -
day18|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
当p和q的值小于根节点,说明都在左子树,当p、q的值大于根节点,说明都在右子树,如果根节点的值在p、q的之间,说明此时根节点就是最近的公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。,新值和原始二叉搜索树中的任意节点值都不同。原创 2023-01-19 22:19:47 · 1707 阅读 · 0 评论 -
day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。给你一个含重复值的二叉搜索树(BST)的根节点。差值是一个正数,其数值等于两值之差的绝对值。因为根据定义最近公共祖先节点可以为节点本身。,找出并返回 BST 中的所有。如果树中有不止一个众数,可以按。给你一个二叉搜索树的根节点。(即,出现频率最高的元素)。的最近公共祖先是节点。的最近公共祖先是节点。原创 2023-01-19 15:32:43 · 1483 阅读 · 0 评论 -
day16|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
[2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- 只有一个元素,所以子节点是一个值为 1 的节点。如果左右指针的差小于1,表示已经没有节点了 如果左右指针的差等于1,表示只有一个节点,直接放到二叉树。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。原创 2023-01-17 22:34:28 · 488 阅读 · 0 评论 -
day15|513.找树左下角的值、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
树中存在两条根节点到叶子节点的路径: (1 --> 2): 和为 3 (1 --> 3): 和为 4 不存在 sum = 5 的根节点到叶子节点的路径。递归法:找到最底层的左叶子 递归和回溯,左遍历必须在前,无论多深,左先遍历,一定最先找到左节点的值。不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。等于目标和的根节点到叶节点路径如上图所示。等于目标和的根节点到叶节点路径如上图所示。假设二叉树中至少有一个节点。原创 2023-01-15 23:17:14 · 413 阅读 · 0 评论 -
day14|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
递归法:利用后序遍历,分别求出其左右子树的高度, 如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。给你一个二叉树的根节点。,返回所有从根节点到叶子节点的路径。是指没有子节点的节点。,返回所有左叶子之和。原创 2023-01-13 22:59:16 · 278 阅读 · 0 评论 -
day13|559.n叉树的最大深度、222.完全二叉树的节点个数
求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。同111题,利用递归,根节点的高度就是整个二叉树的深度。原创 2023-01-13 18:54:15 · 1091 阅读 · 0 评论 -
day12|层序遍历合集、226.翻转二叉树、101.对称二叉树
借助队列,先把元素加入队列中,如果队列长度>0,就把这个元素移除队列,并加到数组中, 再去判断是否有左右孩子,如果有就依次加入队列中,当第一层的长度减为0时, 则进行下一层的遍历。借助队列,先把元素加入队列中,如果队列长度>0,就把这个元素加到数组中, 再去判断是否有左右孩子,如果有就依次加入队列中,当第一层的长度减为0时,则进行下一层的遍历。层序遍历的时候, 判断是否遍历到单层的最后面的元素, 如果是,就放进list数组中。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。原创 2023-01-11 23:14:35 · 349 阅读 · 0 评论 -
day11|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历
给你二叉树的根节点root,返回它节点值的前序遍历。问题分析:1、确定递归函数的参数和返回值2、确定终止条件3、确定单层递归的逻辑原创 2023-01-10 23:34:58 · 261 阅读 · 0 评论 -
day10|239. 滑动窗口最大值、347.前 K 个高频元素
遍历整数数组,把数组下标依次加入队列,当队列加了一个下标代表的数,比之前代表的数都大, 那么就把队列中前面的下标全都移除,所以队列最前面的下标对应的数是最大值。每当超过k的范围就把队列里最前面的下标移除。这题有点ex,一开始队列存的是数而不是下标,结果就是,如果最大数在中间,完全移除不了,看了题解才知道要存下标,不然就得自己新写个队列,要写新方法,太麻烦果断放弃,直接改下标。当小顶堆的元素数量>k,且出现次数大于根节点,则移出小顶堆的根节点,再添加新节点。的滑动窗口从数组的最左侧移动到数组的最右侧。原创 2023-01-09 23:41:28 · 323 阅读 · 0 评论 -
day9|20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。当遍历到右括号时,与栈中的右括号进行比对,如果相同则弹出栈。,表示一个根据逆波兰表达法表示的算术表达式。遍历字符串,如果栈顶没有出现过或栈为空,则把它放进栈里, 如出现过则弹出栈顶元素。该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。,判断字符串是否有效。原创 2023-01-08 18:41:06 · 47 阅读 · 0 评论 -
day8|232.用栈实现队列、225. 用队列实现栈
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty模拟队列需要两个栈,一个输入栈,一个输出栈。输入栈直接调用push, 输出栈则需要先判断是否为空,若为空则把输入栈中的元素全部导进来,再pop如果不为空则直接调用poppeek返回输出栈的栈顶元素,同样先判断输出栈是否为空。原创 2023-01-07 15:59:17 · 74 阅读 · 0 评论 -
day7|344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。编写一个函数,其作用是将输入的字符串反转过来。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。是由非空格字符组成的字符串。原创 2023-01-04 23:10:18 · 63 阅读 · 0 评论 -
day6|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
②哈希法:定义一个map,为前两个数组A和B其中的元素a和b相加的和。遍历数组C和D其中的元素c和d相加的和,判断map有没有想要的元素:0-(c+d) 因为0-(c+d)=a+b。①哈希法:定义一个数组,范围是0~25。为了记录magazine里所有出现字母的次数, 最后判断magazine是否包含所需要的所有字母。①暴力法:遍历四个数组,分别取元素相加,看是否和为0,为零count++。,定义count,如果map中存在想要的元素,就加上其出现过的次数。key(和)-value(出现的次数)原创 2023-01-03 22:52:47 · 95 阅读 · 1 评论 -
day5|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
给一个集合问是否出现过,那一定要用哈希表。哈希表分为:数组、set、map数组适合数值很小,且集中不分散 set有去重性,数值大可用,分散也可用。原创 2023-01-01 23:51:21 · 89 阅读 · 0 评论 -
day4|24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、02.07. 链表相交 、142.环形链表II
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。但是,如果要删除一个节点,指针需要到删除节点的前一个节点 所以,需要让快指针比慢指针先走n+1步,这样慢指针就指向了被删节点的前一个节点。两个节点为一组,要找到每组结点的前一个节点, 来进行指针换向。正常思路是,设置快慢指针,先让快指针移动n步, 然后再让慢指针移动。,请你找出并返回两个单链表相交的起始节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。原创 2023-01-01 00:32:54 · 59 阅读 · 0 评论 -
day3|203.移除链表元素 、707.设计链表、206.反转链表
数组与链表的区别:①数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。②链表是通过指针域的指针链接在内存中各个节点。所以链表中的节点在内存中不是连续分布的 , 而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。③链表动态变化长度,只有数组才是长度固定,所以不用for循环遍历长度。原创 2022-12-31 01:14:47 · 119 阅读 · 0 评论 -
day2|977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II
一个向前遍历,一个向后遍历。判断两边平方之后的大小(有可能有负数在前,所以先从头尾比较大小)。如果前面大,就把平方后的值赋给新数组,因为此题为递增顺序,而找出的是最大值,所以把平方后的值放到尾部,再递减新数组下标值k。平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]时间复杂度为:O(nlogn),取决于快速排序的时间复杂度。定义一个新数组,定义两个指针,分别在前后。组成的新数组,要求也按。先平方后,再快速排序。原创 2022-12-30 01:48:56 · 317 阅读 · 0 评论