
【代码随想录】刷题记录
文章平均质量分 53
零基础跟着【代码随想录】第一遍刷题记录
捞鱼哲学家
0基础算法研究生自救笔记,不想失业啊啊啊啊
展开
-
【代码随想录】刷题记录(115)-岛屿数量(广搜)
题目描述给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。输入描述第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0。输出描述输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。输入示例输出示例3提示信息根据测试案例中所展示,岛屿数量共有 3 个,所以输出 3。原创 2025-02-14 11:06:56 · 498 阅读 · 0 评论 -
【代码随想录】刷题记录(114)-岛屿数量(深搜)
题目描述给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。输入描述第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0。输出描述输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。输入示例输出示例3提示信息根据测试案例中所展示,岛屿数量共有 3 个,所以输出 3。原创 2025-02-13 11:19:44 · 490 阅读 · 0 评论 -
【代码随想录】刷题记录(113)-最长递增子序列
给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。41。原创 2025-02-12 11:02:16 · 268 阅读 · 0 评论 -
【代码随想录】刷题记录(112)-单词拆分
给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。true返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。true返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。原创 2025-02-11 11:53:17 · 379 阅读 · 0 评论 -
【代码随想录】刷题记录(111)-完全平方数
给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。原创 2025-02-10 20:45:14 · 306 阅读 · 0 评论 -
【代码随想录】刷题记录(110)-零钱兑换
给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。原创 2025-02-08 17:46:41 · 219 阅读 · 0 评论 -
【代码随想录】刷题记录(109)-携带研究材料(0-1背包问题)
小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。输入描述第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。原创 2025-02-08 15:55:43 · 279 阅读 · 0 评论 -
【代码随想录】刷题记录(108)-每日温度
天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。,表示每天的温度,返回一个数组。生病了,写代码写得好烦好烦好烦。原创 2025-01-23 16:40:27 · 340 阅读 · 0 评论 -
【代码随想录】刷题记录(107)-打家劫舍 III
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 79小偷一晚能够盗取的最高金额 4 + 5 = 9[1, 104]原创 2025-01-21 16:14:05 · 330 阅读 · 0 评论 -
【代码随想录】刷题记录(106)-打家劫舍II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,今晚能够偷窃到的最高金额。3你不能先偷窃1号房屋(金额=2),然后偷窃3号房屋(金额=2),因为他们是相邻的。4你可以先偷窃1号房屋(金额=1),然后偷窃3号房屋(金额=3)。偷窃到的最高金额=1+3=4。3。原创 2025-01-20 15:57:02 · 382 阅读 · 0 评论 -
【代码随想录】刷题记录(105)-打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。原创 2025-01-17 16:45:20 · 337 阅读 · 0 评论 -
【代码随想录】刷题记录(104)-不同的二叉搜索树
给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的有多少种?返回满足题意的二叉搜索树的种数。原创 2025-01-16 15:07:47 · 196 阅读 · 0 评论 -
【代码随想录】刷题记录(103)-整数拆分
给定一个正整数n,将其拆分为k个的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。原创 2025-01-15 14:56:42 · 590 阅读 · 0 评论 -
【代码随想录】刷题记录(102)-不同路径 II
给定一个m x n的整数数组grid。一个机器人初始位于(即grid[0][0]机器人尝试移动到(即机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用1和0来表示。机器人的移动路径中不能包含有障碍物的方格。返回机器人能够到达右下角的不同路径数量。测试用例保证答案小于等于2 * 109。23x3 网格的正中间有一个障碍物。从左上角到右下角一共有2条不同的路径:1. 向右 -> 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右 -> 向右101。原创 2025-01-14 16:25:51 · 518 阅读 · 0 评论 -
【代码随想录】刷题记录(101)-不同路径
一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?283从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下2862 * 109。原创 2025-01-14 14:41:50 · 315 阅读 · 0 评论 -
【代码随想录】刷题记录(100)-使用最小花费爬楼梯
题目描述:给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。,20]15你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15。cost = [,100,,1,,100,,100,6你将从下标为 0 的台阶开始。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。原创 2025-01-13 16:10:42 · 287 阅读 · 0 评论 -
【代码随想录】刷题记录(99)-爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶。原创 2025-01-13 15:39:13 · 279 阅读 · 0 评论 -
【代码随想录】刷题记录(98)-斐波那契数
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。原创 2025-01-10 17:40:37 · 153 阅读 · 0 评论 -
【代码随想录】刷题记录(97)-监控二叉树
给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视计算监控树的所有节点所需的最小摄像头数量。1如图所示,一台摄像头足以监控所有节点。2需要至少两个摄像头来监视树的所有节点。上图显示了摄像头放置的有效位置之一。[1, 1000]原创 2025-01-09 16:35:31 · 229 阅读 · 0 评论 -
【代码随想录】刷题记录(96)-单调递增的数字
当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是的。给定一个整数n,返回小于或等于n的最大数字,且数字呈。原创 2025-01-08 16:57:53 · 276 阅读 · 0 评论 -
【代码随想录】刷题记录(95)-合并区间
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。原创 2025-01-08 16:30:06 · 399 阅读 · 0 评论 -
【代码随想录】刷题记录(94)-划分字母区间
给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。[10]原创 2025-01-08 15:42:40 · 657 阅读 · 0 评论 -
【代码随想录】刷题记录(93)-无重叠区间
给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。只在一点上接触的区间是。例如[1, 2]和[2, 3]是不重叠的。1移除 [1,3] 后,剩下的区间没有重叠。2你需要移除两个 [1,2] 来使剩下的区间没有重叠。0你不需要移除任何区间,因为它们已经是无重叠的了。原创 2025-01-07 16:27:46 · 639 阅读 · 0 评论 -
【代码随想录】刷题记录(92)-用最少数量的箭引爆气球
思路是先按照左边界排序,如果某个元素的左边界和上一个元素的右边界完全没有重合,说明需要一支新的箭,否则如果有重合,则更新当前元素的右边界为上一个元素右边界和这个元素右边界的最小值,这样做可以判断是否和下一个元素的左边界重合,即判断射当前气球和上一个气球的箭能不能射下一个气球。- 在x = 2处发射箭,击破气球[1,2]和[2,3]。- 在x = 4处射出箭,击破气球[3,4]和[4,5]。-在x = 6处射出箭,击破气球[2,8]和[1,6]。处射出一支箭,若有一个气球的直径的开始和结束坐标为。原创 2025-01-07 16:12:35 · 450 阅读 · 0 评论 -
【代码随想录】刷题记录(91)-根据身高重建队列
假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个表示第i个人的身高为hi,前面有ki个身高大于或等于hi的人。请你重新构造并返回输入数组people所表示的队列。返回的队列应该格式化为数组queue,其中是队列中第j个人的属性(queue[0]是排在队列前面的人)。编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。原创 2025-01-07 15:38:52 · 533 阅读 · 0 评论 -
【代码随想录】刷题记录(90)-柠檬水找零
对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。由于不是每位顾客都得到了正确的找零,所以答案是 false。原创 2025-01-06 19:57:07 · 333 阅读 · 0 评论 -
【代码随想录】刷题记录(89)-分发糖果
因为我们步骤1中已经给元素加过1了,但是我们要判断的是没加1前的元素是否比它右边的元素分数高,所以我们可以给右边的元素+1再进行比较,也可以左边的元素-1比较完再+1;(1)我是按照先判断孩子是否比左边的分数高,再判断是否比右边的分数高,可以顺序调换一下,整体思路不变;分为两种需要更新糖果数量的情况:左孩子分数>右孩子, 和右>左,相等的时候不用更新;你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。步骤1:先判断是否比左边分数高,即糖果数是否要比左边的+1。很简单,就是该指针的元素值+1;原创 2025-01-06 17:12:25 · 537 阅读 · 0 评论 -
【代码随想录】刷题记录(88)-加油站
前段时间学得太闷了,于是跨年&元旦给自己放了接近一周的假,出国去了一趟马来西亚和新加坡,回来后心情平静了很多,一些急功近利的焦躁欲望也变淡了........今天得知一个自学转码的本科同学毕业一年多已经存款30了,心好累,被自己穷笑了。我发现力扣其实写代码没有想象的那么难(如果不考虑可读性,简洁性,占用内存这些优化),难的是算法,很像以前解数学题,把问题转换为熟悉的、可以理解的简单问题。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。因此,3 可为起始索引。原创 2025-01-06 16:23:43 · 267 阅读 · 0 评论 -
【代码随想录】刷题记录(87)-K次取反后最大化的数组和
(2)如果遍历完数组k还没用完,当k为偶数的时候,就把k反复给同一个元素取反直到k==0,取反偶数次该元素没变化,所以可以直接return;当k为奇数的时候,相当于多余一个取反次数,给最后一个元素取反,因为此时数组都不是负数,而该元素的绝对值最小,对和的负影响最小;已经无法静下心来思考一道题了。选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。选择下标 1 ,nums 变为 [4,-2,3]。原创 2024-12-27 16:25:12 · 617 阅读 · 0 评论 -
【代码随想录】刷题记录(86)-跳跃游戏 II
每天写代码写得好烦,原本只需要写leetcode,觉得写代码还挺有意思。自从需要写神经网络之后,手一直敲一直敲,无穷无尽的代码让我心生厌烦。覆盖范围到了就行,但是需要注意指针不能只设一个就够了,需要一个覆盖范围的指针,一个存储当前位置的指针,还需要一个遍历元素的指针;从下标为 0 跳到下标为 1 的位置,跳。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。原创 2024-12-27 15:56:41 · 548 阅读 · 0 评论 -
【代码随想录】刷题记录(85)-跳跃游戏
判断是否能跳到终点,就看每一步的下一步覆盖范围有多大。像下图就是能到终点和不能到终点的情况。而贪心算法贪的就是能不能最快地到终点,比如如果我第一个数能跳到终点,就不用继续遍历第二个数了。无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。原创 2024-12-25 18:05:13 · 535 阅读 · 0 评论 -
【代码随想录】刷题记录(84)-买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。原创 2024-12-25 17:26:44 · 416 阅读 · 0 评论 -
【代码随想录】刷题记录(83)-最大子数组和
根据贪心算法的原理,局部最优解推出全局最优解。那么,只要加上下一个数比当前累加值大,就立即更新加上下一个值的结果;而如果下一个数是负数,那么立马归零,表示这个数打断了子序列(因为一旦加上一个负数,只会一直“拖后腿”),请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。原创 2024-12-24 20:21:22 · 173 阅读 · 0 评论 -
【代码随想录】刷题记录(82)-摆动序列
实际上curdiff==0说明有两个元素是一样的,那么只要略过去就行了,不用传入if判断条件里;其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。仅有一个元素或者含两个不等元素的序列也视作摆动序列。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。摆动序列的三种情况:(1)上下有平坡;(3)单调坡中有平坡;原创 2024-12-23 11:47:54 · 355 阅读 · 0 评论 -
【代码随想录】刷题记录(81)-分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。你有两个孩子和三块小饼干,2 个孩子的胃口值分别是 1,2。,这是能让孩子们满足胃口的饼干的最小尺寸;你拥有的饼干数量和尺寸都足以让所有孩子满足。,我们可以将这个饼干。所以你应该输出 1。所以你应该输出 2。原创 2024-12-23 11:06:28 · 169 阅读 · 0 评论 -
【代码随想录】刷题记录(80)-全排列 II
注意参数比较多,不要把nums[i]和used[i]搞混了啊啊啊啊啊。参考代码: 差不多,但是信息密度高一点(指行数少)一套组合拳:数组排序+树层去重+树枝跳过本身。给定一个可包含重复数字的序列。返回所有不重复的全排列。原创 2024-12-20 11:16:01 · 486 阅读 · 0 评论 -
【代码随想录】刷题记录(79)-全排列
和组合区分的地方:(1)在排列中,回溯的startIndex始终都是从0开始,而不是i+1;(2)创建used数组,跳过已经占用的元素这一次遍历;给定一个不含重复数字的数组。原创 2024-12-20 10:36:42 · 417 阅读 · 0 评论 -
【代码随想录】刷题记录(78)-非递减子序列
因为seen是在for上面定义的,可以简单地理解为:for这一行里面的内容表示的是一个树层,而在backtracking递归调用几次,就是往下深处搜索几次,所以每往下到一个新的树层,seen被重新定义。比如[4 6 7 7],对于两个同一树层的7,seen了一次就不会再发生,也就只会产生一个[4 6 7];但是等它返回上一树层的时候,7还没有加入到seen里来,所以就可以获得[4 7]了。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。啊啊啊啊啊啊要善用集合啊啊啊啊啊啊啊。原创 2024-12-19 14:31:40 · 439 阅读 · 0 评论 -
【代码随想录】刷题记录(77)-子集II
这个更巧妙,它不用used变量,而是把i的判断条件改为i>startIndex,这样的好处是形如[2 2]的数组,当path已经==[2]时,遍历到下一个2时,此时对应的刚好是i==startIndex,所以这个2依然被添加成为[2 2]!否则类似[1 2 2]的数组,是输出不了[1 2 2]或者[2 2]这样的子集的。类似,需要先对原数组进行排序和剪枝的操作。在使用回溯的时候,可以列树形图,这样直观理解很多!,其中可能包含重复元素,请你返回该数组所有可能的。返回的解集中,子集可以按。原创 2024-12-19 10:17:48 · 415 阅读 · 0 评论 -
【代码随想录】刷题记录(76)-子集
就是path每变化一次,保存一次。返回该数组所有可能的。原创 2024-12-18 10:59:53 · 347 阅读 · 0 评论