代码随想录
文章平均质量分 88
XiaoMing_Coder
太原理工大学,云顶书院Java方向
展开
-
代码随想录 图论-并查集
寻找图中是否存在路径这道题中的类可看做并查集的标准类。原创 2024-03-26 19:51:25 · 894 阅读 · 0 评论 -
代码随想录 图论
逐个遍历元素,遍历到为1的元素岛屿数量就+1,通过dfs向上下左右方向的位置dfs搜索,将该岛屿首个元素能辐射到的范围中的为1的陆地全部修改为‘0’,这样该元素在再次被访问到的时候就不会计数或者向四周访问(因为每个位置向上下左右访问,访问道德位置又向上下左右访问,这样会一直访问,导致栈溢出)。广度优先遍历,遇到‘1’的情况就将岛屿数量+1, 并广度优先遍历上下左右的元素,遇到‘1’就标记已经访问过,遇到‘0’就停止向下访问。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。原创 2024-03-26 19:26:02 · 1823 阅读 · 0 评论 -
代码随想录 单调栈
时间复杂度为O(n)。,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。,因为单纯的说从左到右或者从前到后,不说栈头朝哪个方向的话,大家一定比较懵。原创 2024-03-25 20:13:14 · 937 阅读 · 0 评论 -
代码随想录 动态规划-子序列问题-回文
647. 回文子串中等提示给你一个字符串 ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = "abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:s = "aaa"输出:6原创 2024-03-24 19:35:31 · 648 阅读 · 0 评论 -
代码随想录 动态规划-子序列问题-编辑距离
t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];其实这里 大家可以发现和。原创 2024-03-24 15:38:01 · 674 阅读 · 0 评论 -
代码随想录 动态规划-子序列问题-子序列(连续)
而是dp[6]。在回顾一下dp[i]的定义:包括下标i之前的最大连续子序列和为dp[i]。那么我们要找最大的连续子序列,就应该找每一个i为终点的连续最大子序列。所以在递推公式的时候,可以直接选出最大的dp[i]。原创 2024-03-23 00:26:23 · 934 阅读 · 0 评论 -
代码随想录 动态规划-子序列问题-子序列(不连续)
其实也就是说A和B的最长公共子序列是[1,4],长度为2。 这个公共子序列指的是相对顺序不变(即数字4在字符串A中数字1的后面,那么数字4也应该在字符串B数字1的后面)这么分析完之后,大家可以发现:本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!原创 2024-03-22 15:26:07 · 549 阅读 · 0 评论 -
代码随想录 动态规划-股票问题
简单给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。原创 2024-03-21 15:08:12 · 968 阅读 · 0 评论 -
代码随想录 动态规划-打家劫舍
目录198.打家劫舍 213.打家劫舍II337.打家劫舍III 198. 打家劫舍中等你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。原创 2024-03-19 23:37:25 · 718 阅读 · 0 评论 -
代码随想录 动态规划-完全背包问题
时间限制:1.000S 空间限制:128MB小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的重量,并且具有不同的价值。小明的行李箱所能承担的总重量为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。第一行包含两个整数,N,V,分别表示研究材料的种类和行李空间。原创 2024-03-19 14:36:14 · 1057 阅读 · 0 评论 -
代码随想录 动态规划-0-1背包问题
1049. 最后一块石头的重量 II中等提示有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x原创 2024-03-18 21:52:03 · 855 阅读 · 0 评论 -
代码随想录 动态规划-基础题目
从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。所以递推公式:dp[i] += dp[j - 1] * dp[i - j];原创 2024-03-14 20:23:15 · 959 阅读 · 0 评论 -
代码随想录 贪心算法-难度题目-其他题目
中等给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。。原创 2024-03-12 19:29:37 · 736 阅读 · 0 评论 -
代码随想录 贪心算法-难度题目-区间问题
中等给你一个非负整数数组nums,你最初位于数组的。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。true可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。false无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2024-03-12 16:16:33 · 849 阅读 · 0 评论 -
代码随想录 贪心算法-中等题目-两个维度权衡问题
困难n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。1请你给每个孩子分发糖果,计算并返回需要准备的。5你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。4你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,。先确定右边评分大于左边的情况(也就是从前向后遍历)原创 2024-03-11 21:36:49 · 636 阅读 · 0 评论 -
代码随想录 贪心算法-中等题目-股票问题
中等给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。原创 2024-03-11 20:11:39 · 798 阅读 · 0 评论 -
代码随想录 贪心算法-中等题目-序列问题
中等如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,是一个,因为差值是正负交替出现的。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。给你一个整数数组nums,返回nums中作为的。6整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。7这个序列包含几个长度为 7 摆动序列。原创 2024-03-11 19:15:42 · 1156 阅读 · 0 评论 -
代码随想录 贪心算法-简单题目
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。原创 2024-03-10 21:44:19 · 2094 阅读 · 0 评论 -
代码随想录 回溯算法-棋盘问题
困难按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的的解决方案。每一种解法包含一个不同的的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。n = 4如上图所示,4 皇后问题存在两个不同的解法。原创 2024-03-09 13:19:11 · 644 阅读 · 0 评论 -
代码随想录 回溯算法-排序
中等给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以返回答案。]\这里先对传入的集合排序是为了先访问到字典排序更小的元素,backtracking返回boolean是为了只找一个有效行程,先找到的那个有效行程一定是字典排序更小的,用used数组来进行树枝去重原创 2024-03-08 22:09:05 · 979 阅读 · 0 评论 -
代码随想录 回溯算法-子集
给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。原创 2024-03-07 19:26:50 · 766 阅读 · 0 评论 -
代码随想录 回溯算法-分割
用以表示一个 IP 地址,返回所有可能的。是正着读和反着读都一样的字符串。分割成一些子串,使每个子串都是。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。所有可能的分割方案。,这些地址可以通过在。原创 2024-03-07 16:41:35 · 704 阅读 · 0 评论 -
代码随想录 回溯算法-组合
举个例子,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。来举一个例子,n = 4,k = 4的话,那么第一层for循环的时候,从元素2开始的遍历都没有意义了。在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。从2开始搜索都是合理的,可以是组合[2, 3, 4]。原创 2024-03-06 15:42:20 · 894 阅读 · 0 评论 -
代码随想录 二叉树第五周
中等给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]6节点2和节点8的最近公共祖先是6。2节点2和节点4的最近公共祖先是2, 因为根据定义最近公共祖先节点可以为节点本身。原创 2024-03-05 20:55:06 · 972 阅读 · 0 评论 -
代码随想录 二叉树第四周
简单给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。合并过程必须从两个树的根节点开始。原创 2024-03-04 13:14:30 · 933 阅读 · 0 评论 -
代码随想录 二叉树第三周
简单给定二叉树的根节点root,返回所有左叶子之和。24在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24root = [1]0[1, 1000]原创 2024-03-03 00:01:08 · 734 阅读 · 0 评论 -
代码随想录 二叉树第二周
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是指从根节点到最远叶子节点的最长路径上的节点数。的左右两个子树的高度差的绝对值不超过 1。的某个节点和这个节点的所有后代节点。,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。原创 2024-03-01 18:10:29 · 703 阅读 · 0 评论 -
代码随想录 二叉树第一周
前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。为什么要先加入 右孩子,再加入左孩子呢? 因为这样出栈的时候才是中左右的顺序。原创 2024-02-28 21:59:00 · 282 阅读 · 0 评论 -
代码随想录 栈与队列
简单请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty。原创 2024-02-20 21:59:58 · 787 阅读 · 0 评论 -
代码随想录 字符串
简单提示编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须、使用 O(1) 的额外空间解决这一问题。简单的双指针。原创 2024-01-11 16:46:28 · 1118 阅读 · 1 评论 -
KMP算法
每次匹配都从模式串的开头开始,时间复杂度为O(n*m)KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。next数组,即前缀表,记录了模式串与主串不匹配时,模式串一个从哪开始重新匹配举一个例子:要在文本串:aabaabaafa 中查找是否出现过一个模式串:aabaaf。文本串中第六个字符b 和 模式串的第六个字符f,不匹配了。如果暴力匹配,发现不匹配,此时就要从头匹配了。但如果使用前缀原创 2024-01-11 16:41:59 · 860 阅读 · 1 评论 -
代码随想录 哈希表-08-四数之和(双指针法)
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):原创 2024-01-10 19:24:05 · 353 阅读 · 0 评论 -
代码随想录 哈希表-06-赎金信 + 双向映射
关于字符串的哈希题目还是用数组作为哈希表运行时间小一些。原创 2024-01-09 23:36:25 · 332 阅读 · 0 评论 -
代码随想录 哈希表-05-四数相加II
给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i, j, k, l)能满足:0原创 2024-01-09 23:21:03 · 355 阅读 · 0 评论 -
代码随想录 哈希表-04-两数之和
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。原创 2024-01-09 22:44:04 · 366 阅读 · 0 评论 -
代码随想录 哈希表-03-快乐数
编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果这个过程结果为1,那么这个数就是快乐数。如果n是快乐数就返回true;不是,则返回false。原创 2024-01-09 22:39:07 · 345 阅读 · 0 评论 -
代码随想录 哈希表-02-两个数组的交集
简单给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是的。我们可以。[2][9,4][4,9] 也是可通过的这道题目的关键是输出结果的每个元素是唯一的,我们不妨用Set这种数据结构储存利用题目中给出的元素的范围,使用数组称为哈希表的承载体。原创 2024-01-09 21:12:08 · 422 阅读 · 0 评论 -
代码随想录 哈希表-01-有效的字母异位词
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。我的第一想法是利用哈希表的方式,相较于代码随想录中的解答繁琐。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。原创 2024-01-07 19:20:07 · 914 阅读 · 1 评论 -
代码随想录 链表
Java中并没有定义ListNode这个节点类,包括单向链表,双向链表,循环链表,都需要去学习它的写法,自定义在处理链表的题目时,要注意通过画图的方法来摸清楚各个节点的应用和处理模式原创 2024-01-04 14:36:27 · 993 阅读 · 1 评论 -
代码随想录 数组-05-螺旋矩阵
坚持循环不变量原则,模拟顺时针画矩阵的过程:填充上行从左到右,填充右列从上到下,填充下行从右到左,填充左列从下到上,由外向内一圈一圈这么画下去。原创 2023-12-24 23:10:42 · 370 阅读 · 1 评论