代码随想录
文章平均质量分 58
没脑袋的喵
软件工程专业在读研究生
展开
-
美团24秋招第一套笔试试题
可分为染当前结点和不染当前结点进行dp。我的代码(16/20)原创 2024-03-21 10:51:50 · 220 阅读 · 0 评论 -
图论|207. 课程表 210. 课程表 II
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]否则,返回 false。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。学习课程 1 之前,你需要完成课程 0。原创 2024-02-28 22:08:29 · 457 阅读 · 0 评论 -
二叉树 103. 二叉树的锯齿形层序遍历 230. 二叉搜索树中第K小的元素
给你二叉树的根节点 root ,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。在Java中,没有直接内置的“双端队列”(Deque)的概念,但是我们可以使用LinkedList类来实现一个双端队列,因为LinkedList实现了Deque接口使用层序遍历加双端链表的方式。原创 2024-02-26 18:42:24 · 193 阅读 · 0 评论 -
二叉树|173. 二叉搜索树迭代器 129. 求根节点到叶节点数字之和
BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。否则返回 false。给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。int next()将指针向右移动,然后返回指针处的数字。:用null标记下一个输出 处理的left变为null。计算从根节点到叶节点生成的 所有数字之和。叶节点 是指没有子节点的节点。原创 2024-02-24 14:18:20 · 344 阅读 · 0 评论 -
二叉树|116.填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II
其他解法:同一个父亲的节点可以通过父节点链接 不同父亲的最左子节点和最右子节点通过父节点的next链接进行连接 最终的终止条件是节点的左节点不为空(说明到达最后一层)填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。第二种解决方式 在当前层为下一层创建链表 到下一层是使用虚拟头节点->next获取下一层链表的节点 循环构建下一层的链表。给定一个完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。原创 2024-01-28 20:12:47 · 262 阅读 · 0 评论 -
链表|138. 随机链表的复制
深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。返回复制链表的头节点。原创 2024-01-21 21:37:53 · 341 阅读 · 0 评论 -
128. 最长连续序列|289. 生命游戏
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;如果死细胞周围正好有三个活细胞,则该位置死细胞复活;原创 2024-01-17 21:47:51 · 432 阅读 · 0 评论 -
矩阵&滑动窗口|36. 有效的数独 3. 无重复字符的最长子串
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。注意条件:s 由英文字母、数字、符号和空格组成。所以 不能用英文对应数组的方式进行记录。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。原创 2024-01-17 00:58:47 · 1889 阅读 · 0 评论 -
61. 旋转链表 86. 分隔链表 |面试经典题
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。你应当 保留 两个分区中每个节点的初始相对位置。原创 2024-01-12 17:33:26 · 476 阅读 · 0 评论 -
双指针|11.盛最多水的容器
11.盛最多水的容器**题目:**给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。题目链接:11.盛最多水的容器解题思路及代码:# 暴力法超时class Solution { public int maxArea(int[] height) { int result=Integer.M原创 2024-01-05 09:07:24 · 361 阅读 · 0 评论 -
数组与字符串|169. 多数元素 14. 最长公共前缀
推论一:若记众数的票数为 +1 ,非众数的票数为−1 ,则一定有所有数字的 票数和 >0。推论二:若数组的前 a个数字的 票数和 =0 ,则 数组剩余 (n−a)个数字的 票数和一定仍 >0 ,即后 (n−a)个数字的 众数仍为 x。原创 2024-01-03 11:41:25 · 363 阅读 · 0 评论 -
数组|6. N 字形变换 12. 整数转罗马数字
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。时间复杂度(O(n))原创 2024-01-02 11:05:01 · 372 阅读 · 0 评论 -
数组|380. O(1) 时间插入、删除和获取随机元素
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true;bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true;int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)。删除时将数组末尾元素移到被删除元素的位置,同时更新哈希表。如果要删除的元素是末尾元素 则不执行移动操作。原创 2024-01-01 13:53:04 · 352 阅读 · 0 评论 -
数组|274. H 指数
*题目:**给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h。如果 h 有多种可能的值,h 指数 是其中最大的那个。int 从大到小排序使用sort函数 需要转为Integer。或者先sort后翻转。原创 2023-12-30 11:29:19 · 392 阅读 · 0 评论 -
Leetcode面试经典 150 题|数组|26. 删除有序数组中的重复项 80. 删除有序数组中的重复项 II
*题目:**给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回 nums 中唯一元素的个数。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。原创 2023-12-25 10:27:38 · 375 阅读 · 0 评论 -
链表|148. 排序链表
直接当作n个长度为1的链表进行归并 先归并为2个有序,继而4,8…直到其长度大于链表长度n。时间复杂度:快排 O(n^2) 超出时间限制。原创 2023-12-14 09:11:33 · 353 阅读 · 0 评论 -
数组|73. 矩阵置零 48. 旋转图像
*题目:**给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。原创 2023-12-11 10:00:37 · 680 阅读 · 0 评论 -
LeetCode100 数组|189. 轮转数组 238. 除自身以外数组的乘积
题目:给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。3.翻转 k到nums.length-1 nums [5,6,7,1,2,3,4]2.翻转 0到k nums=[5,6,7,4,3,2,1]当 nums=[1,2,3,4,5,6,7] k=3 时。1.翻转所有 nums=[7,6,5,4,3,2,1]需通过两次翻转达到效果。原创 2023-12-07 10:38:54 · 405 阅读 · 0 评论 -
Leetcode100 链表|2. 两数相加160. 相交链表 234. 回文链表
2. 两数相加题目:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。题目链接:2. 两数相加代码如下:逆位相加并进位 每次相加时计算当前节点的值和记录是否进1既可class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {原创 2023-12-05 09:43:50 · 846 阅读 · 0 评论 -
图论|684.冗余连接 685. 冗余连接 II
输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。附加的边包含在 1 到 n 中的两个不同顶点间,这条附加的边不属于树中已存在的边。每个元素是一对 [ui, vi],用以表示 有向 图中连接顶点 ui 和顶点 vi 的边,其中 ui 是 vi 的一个父节点。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。返回一条能删除的边,使得剩下的图是有 n 个节点的有根树。附加的边指向根节点,而且是在环路中的最后一条被访问到的边。原创 2023-12-01 11:22:49 · 938 阅读 · 0 评论 -
图论|并查集理论基础 1971. 寻找图中是否存在路径
并查集是一种数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作:查找(Find):确定某个元素属于哪个子集。它可以用来判断两个元素是否属于同一个子集。合并(Union):将两个子集合并成一个集合。原创 2023-11-30 13:09:49 · 763 阅读 · 0 评论 -
代码随想录图论|463. 岛屿的周长
给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100。计算这个岛屿的周长。原创 2023-11-29 14:06:02 · 719 阅读 · 0 评论 -
图论|841钥匙和房间
有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。你可以拿上所有钥匙去解锁其他房间。给你一个数组 rooms 其中 rooms[i] 是你进入 i 号房间可以获得的钥匙集合。如果能进入 所有 房间返回 true,否则返回 false。原创 2023-11-29 13:30:07 · 849 阅读 · 0 评论 -
图论| 827. 最大人工岛 127. 单词接龙
题目:给你一个大小为 n x n 二进制矩阵 grid。最多 只能将一格 0 变成 1。返回执行此操作后,grid 中最大的岛屿面积是多少?岛屿 由一组上、下、左、右四个方向相连的 1 形成。解题思路:暴力解法 把每一个0改为1计算岛屿面积 复杂度:改每一个0为1:n2计算岛屿最大面积n2 会超时优化思路:遍历记录所有岛屿面积 将0附近(上下左右)的岛屿进行联通1.遍历记录所有岛屿面积如何记录:遍历过的岛屿标记岛屿编号(从2开始) 将岛屿编号和最大面积记录在set中。原创 2023-11-17 08:58:21 · 1834 阅读 · 0 评论 -
代码随想录图论|130. 被围绕的区域 417太平洋大西洋水流问题
*题目:**给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。解题思路:在飞地的基础上做改动,使用一个栈存储需要改变的节点。原创 2023-11-16 09:26:37 · 1079 阅读 · 0 评论 -
代码随想录图论部分-695. 岛屿的最大面积|1020. 飞地的数量
给你一个大小为 m x n 的二进制矩阵 grid。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0和岛屿数量很像 这里比较一个最值就行。原创 2023-11-11 08:22:33 · 413 阅读 · 0 评论 -
代码随想录-广度优先搜索理论基础及相关习题
广搜的搜索方式就适合于解决两个点之间的最短路径问题。因为广搜是从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。广搜是一圈一圈的遍历方式,如下图:遍历可以是用队列,还是用栈,甚至用数组实现。原创 2023-11-10 09:14:49 · 64 阅读 · 0 评论 -
深度优先搜索理论基础及习题797.所有可能的路径
dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。dfs需要用到回溯1.确认递归函数,参数2.确认终止条件终止添加不仅是结束本层递归,同时也是我们收获结果的时候。另外,其实很多dfs写法,没有写终止条件,其实终止条件写在了, 下面dfs递归的逻辑里了,也就是不符合条件,直接不会向下递归。原创 2023-11-08 08:58:30 · 85 阅读 · 0 评论 -
代码随想录打卡第六十三天|84.柱状图中最大的矩形
题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。原创 2023-11-07 18:13:06 · 79 阅读 · 0 评论 -
代码随想录打卡第62天|● 503.下一个更大元素II ● 42. 接雨水
题目:给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。:重点在于循环 只需将循环变为线性即可,double数组模拟循环的状况。原创 2023-11-06 10:17:30 · 67 阅读 · 0 评论 -
代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。维持一个递减的单调栈,一旦,没有递减 进行出栈 当前元素大于栈顶元素则说明栈顶元素找到下一个更高温度,记录结果并出栈。原创 2023-11-04 06:54:07 · 136 阅读 · 0 评论 -
代码随想录打卡第五十八天|● 583. 两个字符串的删除操作 ● 72. 编辑距离
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。583. 两个字符串的删除操作dp数组的含义:w1[:i-1]与w2[:j-1]相同的最小删除次数比较当前字母如果两个字母相同,则不用进行删除操作即dp[i][j]=dp[i-1][j-1]如果两个字母不同,要么删除w1 要么删除w2 要么两者都删 取三者最小值。原创 2023-11-02 03:40:41 · 153 阅读 · 0 评论 -
代码随想录第五十七天|● 392.判断子序列 ● 115.不同的子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?动态规划写法–编辑距离经典题目。原创 2023-11-01 21:23:22 · 128 阅读 · 0 评论 -
代码随想录打卡第五十六天|1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。原创 2023-10-31 19:55:20 · 171 阅读 · 0 评论 -
代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
*题目:**给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。dp数组的含义:以nums[i]结尾的最长递增子数组所以当该序列以nums[i] 结尾时,遍历nums的0至i-1当该数字nums[j]小于nums[i] 证明可以以nums[i] 结尾 此时dp[i]=dp[j]+1。原创 2023-10-30 22:41:33 · 154 阅读 · 2 评论 -
代码随想录打卡第五十三天|309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设置五个状态。原创 2023-10-28 09:11:34 · 182 阅读 · 0 评论 -
代码随想录打卡第五十二天|123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)注:不同状态转换的关系持有第一支股票:之前不持有,现买入第一支股票;一直持有不持有第一支股票:之前不持有(没买入 没进行操作);之前持有,现卖出,一直未操作,现买入第二支股票;一直持有不持有第二支股票:之前不持有(没买入 没进行操作);之前持有,现卖出。原创 2023-10-27 09:52:04 · 86 阅读 · 0 评论 -
代码随想录打卡第五十一天|121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。121. 买卖股票的最佳时机dp[i][0] 表示第i天持有股票所得最多现金dp[i][1] 表示第i天不持有股票所得最多现金如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来。原创 2023-10-26 11:42:29 · 86 阅读 · 0 评论 -
代码随想录打卡第五十天|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。原创 2023-10-25 08:28:27 · 193 阅读 · 1 评论 -
代码随想录打卡第四十九天|● 139.单词拆分 ● 多重背包 ● 背包问题总结篇
有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大多重背包和01背包是非常像的, 为什么和01背包像呢?每件物品最多有Mi件可用,把Mi件摊开,其实就是一个01背包问题了。另一种实现方式,就是把每种商品遍历的个数放在01背包里面在遍历一遍。原创 2023-10-24 11:13:16 · 50 阅读 · 0 评论