编程题刷题录
文章平均质量分 52
个人的刷题记录
顾城猿
这个作者很懒,什么都没留下…
展开
-
BM49 表达式求值
刷题原创 2024-08-30 14:12:25 · 163 阅读 · 0 评论 -
牛客刷题 堆/栈/队列(一)
【代码】牛客刷题 堆/栈/队列(一)原创 2024-08-22 13:28:13 · 163 阅读 · 0 评论 -
牛客刷题二叉树(三)
【代码】牛客刷题二叉树(三)原创 2024-08-20 10:12:44 · 223 阅读 · 0 评论 -
牛客刷题二叉树(二)
【代码】牛客刷题二叉树(二)原创 2024-08-17 11:55:07 · 140 阅读 · 0 评论 -
牛客刷题二叉树(一)
【代码】牛客刷题二叉树(一)原创 2024-08-16 17:10:30 · 151 阅读 · 0 评论 -
牛客链表刷题(四)
链表刷题原创 2024-06-26 10:10:05 · 200 阅读 · 1 评论 -
牛客链表刷题(三)
链表编程题原创 2024-06-17 17:30:13 · 286 阅读 · 0 评论 -
牛客链表刷题(二)
链表编程题原创 2024-06-15 10:39:21 · 374 阅读 · 0 评论 -
牛客链表刷题(一)
【代码】牛客链表刷题(一)原创 2024-06-14 09:02:37 · 322 阅读 · 0 评论 -
力扣826---安排工作以达到最大收益(Java、排序,双指针)
力扣原创 2024-05-17 11:42:56 · 269 阅读 · 0 评论 -
力扣2391---收集垃圾的最少总时间(Java、前缀和)
力扣题目原创 2024-05-11 13:50:14 · 770 阅读 · 0 评论 -
力扣2960---统计已测试设备(简单题、Java)
力扣原创 2024-05-10 14:18:12 · 368 阅读 · 0 评论 -
力扣2105---给植物浇水II(Java、模拟、双指针)
当 i<j 时,我们分别判断 Alice 和 Bob 的水量是否足够浇水,如果不够,我们就重新灌满水罐。最后我们还需要判断 i 和 j 是否相等,如果相等,我们还需要判断 max(a,b) 是否小于植物的水量,如果小于,我们需要再次重新灌满水罐。- Alice 的水罐有 10 单元水,Bob 的水罐有 8 单元水。- Alice 和 Bob 现在都只有 1 单元水,并分别需要给植物 1 和植物 2 浇水。- 最初,Alice 的水罐中有 3 单元水,Bob 的水罐中有 4 单元水。原创 2024-05-09 09:40:36 · 1122 阅读 · 1 评论 -
力扣2079---给植物浇水(Java、模拟)
最简单的方式就是模拟法,用几个变量,分别记录当前剩余的水量,和下一个要浇的菜的位置索引,还有已经走过的总步数,按照题意进行遍历即可。需要的步数是 = 1 + 1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 + 6 + 6 + 7 = 49。需要的步数是 = 3 + 3 + 4 + 4 + 5 + 5 + 6 = 30。需要的步数是 = 1 + 1 + 2 + 3 + 3 + 4 = 14。- 走到植物 0,1,2 (3 步) ,浇水。- 走到植物 3 (4 步) ,浇水。原创 2024-05-08 09:36:43 · 422 阅读 · 0 评论 -
图遍历算法
*** 顶点类*///是否被访问过//结点的入度/*** 边类*/int weight;原创 2024-03-07 23:42:34 · 473 阅读 · 0 评论 -
图的单源最短路径问题
图的单源最短路径问题,也就是图中某一个节点到图中其他节点的最短路径大小,常用的算法就是迪杰斯特拉算法和贝尔曼福特算法,两者是从不同的角度来对这个问题进行分析的,但是迪杰斯特拉算法并不适用于有负权重的情况,而贝尔曼福特算法则是应用范围更广泛,能解决带有负权重问题的场景。从已经找到的区域到未找到的区域的所有相连节点的边,从中取最小值,并将该边所对应的未找到区域的结点加入到已经找到找到的区域,并更改其最短路径。图是一种比较常用的数据结构,将问题转换成图相关的思路也是比较常用的。原创 2024-03-09 20:41:41 · 366 阅读 · 0 评论 -
力扣101---对称二叉树(简单题)
给你一个二叉树的根节点。, 检查它是否轴对称。原创 2024-03-14 09:27:18 · 413 阅读 · 0 评论 -
力扣111---二叉树的最小深度(简单题,Java,递归+非递归)
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。原创 2024-03-15 14:42:33 · 430 阅读 · 0 评论 -
LCR144翻转二叉树(力扣简单题,Java,递归+非递归)
给定一棵二叉树的根节点 root,请左右翻转这棵二叉树,并返回其根节点。输入:root = [5,7,9,8,3,2,4]输出:[5,9,7,4,2,3,8]原创 2024-03-15 15:16:19 · 471 阅读 · 1 评论 -
力扣105---从前序与中序序列中构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输入: preorder = [-1], inorder = [-1]输出: [3,9,20,null,null,15,7]原创 2024-03-18 22:56:20 · 463 阅读 · 0 评论 -
力扣106---从中序和后序序列构造二叉树
是同一棵树的后序遍历,请你构造并返回这颗。是二叉树的中序遍历,原创 2024-03-18 23:12:03 · 456 阅读 · 0 评论 -
编程题:二叉树层次遍历(Java)
有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。原创 2024-03-22 22:09:13 · 363 阅读 · 0 评论 -
编程题:最长的顺子(Java)
因为顺子不涉及2和大小王,因此,我们不需要考虑这两种牌对我们影响,只需要考虑剩下牌如何产生顺子,剩下的牌就是3---A这几种牌,总共12种,所以可以定义一个数组长度为12,每个元素代表一种牌的个数是否为0,为零就赋值为0,否则赋值为1代表有这个牌,因此,最后我们就是求一个长度为12的数组的最长连续的1元素的长度,用0(n)的时间复杂度就可以完成要求。例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A。A)不能有2,也不能有大小王,不计花色。原创 2024-03-22 22:19:11 · 281 阅读 · 0 评论 -
编程题:找出重复代码(Java、动态规划)
小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。重复代码查找方法:以字符串形式给出两行代码(字符审长度1< length < 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串 注:如果不存在公共子串,返回空字符串。用动态规划解这个题就很简单,只要考虑当前位置对应的元素是否相同,相同就调用前置结果+1,否则就直接赋值为0。最后遍历整个二维数组,找到最大的元素,依据当前位置进行向前遍历,拼接字符串即可得到所要的结果。输出任一最长公共子串。原创 2024-03-22 22:24:10 · 281 阅读 · 0 评论 -
编程题:相同数字的积木游戏(Java)
首先,每种数字第一次出现的时机是需要记录下来的,因为我们是求间隔最长的两个相同元素的间隔长度。小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同目所处位置最远的2块积木块,计算他们的距离。这属于一个简单题目了,我们只要边输入边判断改变即可。他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。接下来 N 行每行一个数字,表示小花排成一排的积大上数字。第一行输入为N,表示小华排成一排的积大总数。如果所有积木数字都不相同,请返回 -1。相同数字的积木的位置最远距离;原创 2024-03-22 22:29:16 · 651 阅读 · 0 评论 -
编程题:寻找路径(Java)
输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分割。注意第一个元素即为根节点的值,即数组的第n元素对应下标n。二叉树也可以用数组来存储,给定一个数组,树的根节点的值储存在下标1, 对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2。n+1, 并且我们用-1代表一个节点为空。给定一个数组存储的二叉树,试求从根节点到最小的叶子节点的路径,路径由节点的值组成。输出从根节点到最小叶子节点的路径上各个节点的值由空格分割用例保证最小叶子节点只有一个。典型的就是使用深度优先遍历,进行求解即可。原创 2024-03-22 22:31:46 · 197 阅读 · 0 评论 -
力扣53---最大数组和(Java、动态规划)
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。原创 2024-03-24 13:32:17 · 250 阅读 · 0 评论 -
力扣74---合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]。解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]输出:[[1,5]]原创 2024-03-24 13:44:36 · 330 阅读 · 0 评论 -
力扣74---搜索二维矩阵
最简单的解决方案就是暴力搜索,我们可以将二维矩阵遍历一遍,最后如果找到就返回true,否则就返回false。基于暴力解法,可以进一步做一下优化,就是根据题目可以知道,二维数组中的每个数字的首元素的特征,我们就能判断一下当前target是否在当前数组和下一个数组的首元素之间来判断是否进行下一步遍历。给你一个整数 target ,如果 target 在矩阵中,返回 true;每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。最好的优化就是在搜索的时候进行二分查找。原创 2024-03-24 23:57:37 · 343 阅读 · 0 评论 -
力扣98---验证二叉搜索树
对于二叉树,我们优先可以考虑一下递归实现,因为递归非常适合二叉树的解决。根节点的值是 5 ,但是右子节点的值是 4。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。原创 2024-03-25 00:24:54 · 383 阅读 · 0 评论 -
力扣438---找到字符串中所有字母异位词
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。时间复杂度高,力扣通过不了、、、超时了。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。原创 2024-03-25 16:46:37 · 267 阅读 · 0 评论 -
力扣547---省份数量(Java、并查集)
是一组直接或间接相连的城市,组内不含其他没有相连的城市。个城市,其中一些彼此相连,另一些没有相连。典型的并查集算法,无脑套用即可。表示二者不直接相连。原创 2024-03-27 21:28:16 · 205 阅读 · 0 评论 -
力扣---1319连通网络的操作次数(并发集、Java)
一道典型的并查集算法,我们可以先用并查集算出每个电脑所连接的区域,也就是相互连接的一个集合。然后看集合中的连接数是否多余,如果多余,那么就可以腾出来多余的线路供给集合之间进行连接,只要腾出来的线路数大于等于集合数量-1,就可以判断可以进行连接联通,最小操作数就是此次的集合数-1,如果不符合那么就是表明不能够联通,直接返回-1即可。,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。如果不可能,则返回 -1。拔下计算机 1 和 2 之间的线缆,并将它插到计算机 1 和 3 上。原创 2024-03-27 23:14:29 · 546 阅读 · 0 评论 -
力扣130---被围绕的区域(DFS、Java)
这道题,我们换一种思路进行思考的话,就会很简单,我们只需要遍历二维矩阵的最边缘的部分,对于最边缘的部分查找是否有'O',如果有,就在此点按照'O'的路径进行深度优先遍历,并将遍历到的点,修改值为其他字符如'A',然后再遍历二维数组,元素为'O'的都修改为'X',元素为'A'的都修改为'O',最后我们这个二维矩阵即为所得。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。被围绕的区间不会存在于边界上,换句话说,任何边界上的。围绕的区域,并将这些区域里所有的。任何不在边界上,或不与边界上的。原创 2024-03-27 23:21:08 · 393 阅读 · 0 评论 -
力扣124---二叉树的最大路径和(DFS,Java)
对于这个题,我们可以借助深度优先遍历,通过深度优先遍历得到每个节点的左右节点之间的路径的最大值,并且如果这个最大值小于0的话,完全没有必要将其加入我们想要的结果集中,如果小于0的话就选用0,以此来更新每个节点的向下最大路径和。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]输入:root = [1,2,3]原创 2024-03-29 08:56:13 · 396 阅读 · 0 评论 -
力扣236---二叉树的最近公共祖先(DFS,Java)
这道题用递归来求解不难,但是,思路确实不容易想出来,我们也是通过深度优先遍历辅助得到我们想要的结点,如果找到这个结点,就返回这个节点,那么该节点的父节点得到的就是该结点,有这个结点就说明某个孩子有这个节点,自己是他的一个父亲,如果某个父亲节点得到的左右两个孩子返回的结果都不为空的话,就说明本结点是公共的祖先结点之一,因此只要找到第一次找到的公共祖先结点即可。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。因为根据定义最近公共祖先节点可以为节点本身。的最近公共祖先是节点。的最近公共祖先是节点。原创 2024-03-29 09:06:34 · 308 阅读 · 0 评论 -
力扣206---反转链表(简单题)
请你反转链表,并返回反转后的链表。原创 2024-03-29 09:22:46 · 348 阅读 · 0 评论 -
力扣207---课程表(拓扑排序、Java)
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]学习课程 1 之前,你需要完成课程 0。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。原创 2024-03-29 14:52:25 · 325 阅读 · 0 评论 -
力扣208---实现Trie(前缀树)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。很简单的自己设计类的一个题目。(发音类似 "try")或者说。原创 2024-03-29 14:55:14 · 460 阅读 · 0 评论 -
力扣46---全排列(递归)
可以用最简单的递归思路,找全排列。给定一个不含重复数字的数组。原创 2024-03-29 15:16:41 · 257 阅读 · 0 评论