leetcode
ershiyidian
知之者不如好之者,好之者不如乐之者~~~
展开
-
【无标题】
给定一个包含红色、白色和蓝色、共n个元素的数组nums对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数01和2分别表示红色、白色和蓝色。必须在的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]原创 2024-07-09 10:44:46 · 154 阅读 · 0 评论 -
力扣16. 最接近的三数之和---相向双指针
给你一个长度为n的整数数组nums和 一个目标值target。请你从nums中选出三个整数,使它们的和与target最接近。返回这三个数的和。假定每组输入只存在恰好一个解。2与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。原创 2024-07-09 09:46:13 · 52 阅读 · 0 评论 -
LC15. 三数之和---相向双指针
给你一个包含n个整数的数组nums,判断nums中是否存在三个元素 *a,b,c ,*使得0?请你找出所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。原创 2024-07-09 09:32:03 · 74 阅读 · 0 评论 -
LC11. 盛水最多的容器---相向双指针
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai)。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。原创 2024-07-09 09:18:26 · 27 阅读 · 0 评论 -
LC167. 两数之和II- 输入有序数组
给你一个下标从开始的整数数组numbers,该数组已按,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是和,则。以长度为 2 的整数数组的形式返回这两个整数的下标index1和index2。你可以假设每个输入,而且你重复使用相同的元素。你所设计的解决方案必须只使用的额外空间。输入:numbers = [2,7,11,15], target = 9输出:[1,2]解释:2 与 7 之和等于目标数 9。因此 index1 = 1, index2 = 2。原创 2024-07-09 09:06:29 · 50 阅读 · 0 评论 -
LC27. 移除元素---同向双指针
给你一个数组nums和一个值val,你需要移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度, 并且 nums中的前两个元素均为。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。原创 2024-07-09 09:00:39 · 66 阅读 · 0 评论 -
LC26. 删除有序数组中的重复项---同向双指针
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么nums的前k个元素应该保存最终结果。将最终结果插入nums的前k个位置后返回k。不要使用额外的空间,你必须在并在使用 O(1) 额外空间的条件下完成。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4]原创 2024-07-09 08:50:05 · 146 阅读 · 0 评论 -
LC349. 两个数组的交集---哈希集合
哈希集合解法给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是的。我们可以。原创 2024-07-07 11:51:05 · 173 阅读 · 0 评论 -
LeetCode735 小行星碰撞---数据结构---栈
给定一个整数数组asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个小行星相互碰撞,较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。两颗移动方向相同的小行星,永远不会发生碰撞。[5,10]10 和 -5 碰撞后只剩下 10。5 和 10 永远不会发生碰撞。原创 2024-07-07 09:48:39 · 141 阅读 · 0 评论 -
LC42. 接雨水---DP---单调递减栈
给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-07-06 22:53:04 · 164 阅读 · 0 评论 -
LC739. 每日温度---数据结构---单调递减栈
根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0来代替。例如,给定一个列表,你的输出应该是。气温列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。原创 2024-07-06 21:37:32 · 254 阅读 · 0 评论 -
LC496. 下一个更大元素 I---数据结构---单调递减栈
nums1中数字x的是指x在nums2中对应位置的比x大的元素。给你两个的数组nums1和nums2,下标从开始计数,其中nums1是nums2的子集。对于每个,找出满足的下标j,并且在nums2确定nums2[j]的。如果不存在下一个更大元素,那么本次查询的答案是-1。返回一个长度为的数组ans作为答案,满足ans[i]是如上所述的。原创 2024-07-06 21:24:36 · 179 阅读 · 0 评论 -
LC71. 简化路径---数据结构---栈
给你一个字符串path,表示指向某一文件或目录的 Unix 风格(以'/'开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点()表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠'/'。对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的必须遵循下述格式:始终以斜杠'/'开头。两个目录名之间必须只有一个斜杠'/'。原创 2024-07-06 17:42:41 · 393 阅读 · 0 评论 -
LC394. 字符串解码---数据结构---栈
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:,表示其中方括号内部的正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4]的输入。原创 2024-07-06 17:20:11 · 274 阅读 · 0 评论 -
LC20. 有效的括号---数据结构---栈
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:1、左括号必须用相同类型的右括号闭合。2、左括号必须以正确的顺序闭合。有效的括号满足以下几个条件:1、字符串的长度一定是偶数。2、括号的匹配,它们匹配成功才有可能是有效的括号。原创 2024-07-06 16:28:07 · 261 阅读 · 0 评论 -
LC150. 逆波兰表达式求值---栈
可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为。每个运算对象可以是整数,也可以是另一个逆波兰表达式。两个整数之间的除法只保留整数部分,原创 2024-07-06 16:14:18 · 183 阅读 · 0 评论 -
LC1047. 删除字符串中的所有相邻重复项---栈
给出由小写字母组成的字符串S会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。"abbaca""ca"解释:例如,在"abbaca"中,我们可以删除"bb"由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串"aaca",其中又只有"aa"可以执行重复项删除操作,所以最后的字符串为"ca"。仅由小写英文字母组成。原创 2024-07-06 11:32:15 · 195 阅读 · 0 评论 -
存在重复元素Ⅱ
给你一个整数数组nums和一个整数k,判断数组中是否存在两个i和j,满足且。如果存在,返回true;否则,返回false。原创 2024-07-05 23:25:08 · 87 阅读 · 0 评论 -
长度最小的子数组
给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。原创 2024-06-28 10:35:52 · 188 阅读 · 0 评论 -
省份数量---邻接矩阵---DFS和BFS
是一组直接或间接相连的城市,组内不含其他没有相连的城市。个城市,其中一些彼此相连,另一些没有相连。的矩阵 isConnected。表示二者不直接相连。原创 2024-06-26 11:40:27 · 200 阅读 · 0 评论 -
岛屿问题---DFS和BFS
给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。grid = [1。原创 2024-06-25 21:12:50 · 322 阅读 · 0 评论 -
最后一块石头的重量---背包DP
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,石头。返回此石头。如果没有石头剩下,就返回0。输入:stones = [2,7,4,1,8,1]输出:1。原创 2024-06-24 21:39:24 · 289 阅读 · 0 评论 -
分割等和子集---背包DP
给你一个的数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。原创 2024-06-24 20:58:41 · 152 阅读 · 0 评论 -
零钱兑换---背包DP
给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1。原创 2024-06-24 20:36:40 · 105 阅读 · 0 评论 -
目标和---背包DP
给你一个整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个例如,,可以在2之前添加'+',在1之前添加'-',然后串联起来得到表达式"+2-1"。返回可以通过上述方法构造的、运算结果等于target的不同的数目。思路1.背包DP。原创 2024-06-24 19:58:49 · 234 阅读 · 0 评论 -
买卖股票的最佳时机系列---状态DP
给定一个数组prices,其中prices[i]是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成笔交易。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。输入:k = 2, prices = [2,4,1]输出:2解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择。原创 2024-06-24 10:34:13 · 529 阅读 · 0 评论 -
粉刷房子---状态DP
假如有一排房子,共n个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个n x 3的正整数矩阵costs来表示的。例如,表示第 0 号房子粉刷成红色的成本花费;表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。原创 2024-06-23 22:55:07 · 187 阅读 · 0 评论 -
不相交的线---二维DP
在两条独立的水平线上按给定的顺序写下nums1和nums2中的整数。现在,可以绘制一些连接两个数字nums1[i]和nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的。原创 2024-06-23 16:11:20 · 205 阅读 · 0 评论 -
最长公共子序列---LCS---DP
给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace"是"abcde"的子序列,但"aec"不是"abcde"的子序列。两个字符串的是这两个字符串所共同拥有的子序列。原创 2024-06-23 10:13:09 · 113 阅读 · 0 评论 -
最长重复子数组---DP
给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。原创 2024-06-22 21:35:06 · 119 阅读 · 0 评论 -
递增的三元组---双指针---贪心
给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。如果存在这样的三元组下标(i, j, k)且满足i < j < k,使得,返回true;否则,返回false。输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意输入:nums = [5,4,3,2,1]输出:false解释:不存在满足题意的三元组输入:nums = [2,1,5,0,4,6]输出:true。原创 2024-06-22 21:00:22 · 118 阅读 · 0 评论 -
最长递增子序列LIS的个数 序列DP
给定一个未排序的整数数组nums返回最长递增子序列的个数。这个数列必须是递增的。输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。原创 2024-06-22 17:40:58 · 283 阅读 · 0 评论 -
最长递增子序列LIS---序列DP
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,数组中的元素而不改变其余元素的顺序。4最长递增子序列是 [2,3,7,101],因此长度为 4。原创 2024-06-22 12:41:13 · 139 阅读 · 0 评论 -
下降路径最小和---序列DP
给你一个n x n的整数数组matrix,请你找出并返回通过matrix的的。可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置(row, col)的下一个元素应当是或者。13如图所示,为和最小的两条下降路径。原创 2024-06-22 10:19:35 · 282 阅读 · 0 评论 -
三角形最小路径和---序列DP
【代码】三角形最小路径和---序列DP。原创 2024-06-21 22:04:05 · 183 阅读 · 0 评论 -
第 N 个泰波那契数---序列DP
泰波那契序列 T(n) 定义如下:T(0) = 0, T(1) = 1, T(2) = 1, 且在 n >= 0 的条件下 T(n+3) = T(n) + T(n+1) + T(n+2)给你整数n,请返回第 n 个泰波那契数 T(n )的值。n = 44。原创 2024-06-21 21:12:30 · 291 阅读 · 0 评论 -
打家劫舍Ⅱ---序列DP
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,今晚能够偷窃到的最高金额。输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。输入:nums = [1,2,3,1]输出:4。原创 2024-06-21 20:45:09 · 139 阅读 · 0 评论 -
打家劫舍---序列DP
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。上述方法使用了数组存储结果。考虑到每间房屋的最高总金额只和该房屋的前两间房屋的最高总金额相关,因此可以使用,在每个时刻只需要存储。原创 2024-06-21 20:26:13 · 122 阅读 · 0 评论 -
最小路径和---序列DP
给定一个包含非负整数的mxn网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。每次只能向下或者向右移动一步。原创 2024-06-21 19:54:17 · 163 阅读 · 0 评论 -
不同路径 II---序列DP
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。。问总共有多少条不同的路径?原创 2024-06-21 19:26:05 · 104 阅读 · 0 评论