
算法
ershiyidian
知之者不如好之者,好之者不如乐之者~~~
展开
-
LC55.跳跃游戏---能否到达最后一个下标---到达尾部的最小步数---贪心算法
如果可以,返回。原创 2024-08-12 18:29:40 · 478 阅读 · 1 评论 -
LC18.四数之和
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。原创 2024-08-10 17:02:38 · 592 阅读 · 0 评论 -
35. 搜索插入位置---二分法
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。21。原创 2024-07-19 21:02:51 · 218 阅读 · 0 评论 -
LeetCode 337、打家劫舍III ---动态规划DP---DFS
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。原创 2024-07-18 22:31:11 · 847 阅读 · 0 评论 -
LeetCode967、连续差相同的数字---回溯---DFS
返回所有长度为n且满足其每两个连续位上的数字之间的差的绝对值为k的。请注意,数字0本身之外,答案中的每个数字都有前导零。例如,01有一个前导零,所以是无效的;但0是有效的。你可以按返回答案。注意,070 不是一个有效的数字,因为它有前导零。原创 2024-07-17 09:49:34 · 254 阅读 · 0 评论 -
单词搜索---回溯法---c++
给定一个m x n二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。true。原创 2024-07-16 23:10:19 · 270 阅读 · 0 评论 -
课程表Ⅱ---拓扑排序---DFS---BFS
现在你总共有numCourses门课需要选,记为0到。给你一个数组,其中,表示在选修课程ai前先选修bi。01[0,1]返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回就可以了。如果不可能完成所有课程,返回。[0,1]总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为[0,1]。[0,2,1,3]总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。原创 2024-07-15 11:14:33 · 164 阅读 · 0 评论 -
课程表---拓扑排序---DFS---BFS
你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程ai则先学习课程bi。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。true总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。false总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。原创 2024-07-15 10:47:08 · 376 阅读 · 0 评论 -
腐烂的橘子---多源BFS
在给定的m x n网格grid中,每个单元格可以有以下三个值之一:值0代表空单元格;值1代表新鲜橘子;值2代表腐烂的橘子。每分钟,腐烂的橘子的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回-1。4。原创 2024-07-13 17:47:53 · 300 阅读 · 0 评论 -
LC841. 钥匙和房间---邻接表---DFS/BFS
有n个房间,房间按从0到n - 1编号。最初,除0号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。你可以拿上所有钥匙去解锁其他房间。给你一个数组rooms其中rooms[i]是你进入i号房间可以获得的钥匙集合。如果能进入房间返回true,否则返回false。true我们从 0 号房间开始,拿到钥匙 1。之后我们去 1 号房间,拿到钥匙 2。原创 2024-07-13 17:18:40 · 216 阅读 · 0 评论 -
LeetCode 53、最大子数组和---序列DP
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。6连续子数组 [4,-1,2,1] 的和最大,为 6。原创 2024-07-12 11:51:12 · 144 阅读 · 0 评论 -
最长回文子串---二维DP
时间复杂度:O(n2),其中 n 是字符串的长度。动态规划的状态总数为 O(n2),对于每个状态,我们需要转移的时间为 O(1)。空间复杂度:O(n2),即存储动态规划状态需要的空间。原创 2024-07-11 10:37:39 · 250 阅读 · 0 评论 -
LC70. 爬楼梯---序列DP动态规划
是什么?原创 2024-07-11 09:17:07 · 226 阅读 · 0 评论 -
LeetCode875、爱吃香蕉的珂珂---二分法
珂珂喜欢吃香蕉。这里有n堆香蕉,第i堆中有piles[i]根香蕉。警卫已经离开了,将在h小时后回来。珂珂可以决定她吃香蕉的速度k(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉k根。如果这堆香蕉少于k根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在h小时内吃掉所有香蕉的kk为整数)。4。原创 2024-07-10 17:32:06 · 187 阅读 · 0 评论 -
LeetCode 34、在排序数组中查找元素的第一个和最后一个位置---二分法
时间复杂度: O(logn) ,其中 n 为数组的长度。二分查找的时间复杂度为 O(logn),一共会执行两次,因此总时间复杂度为 O(logn)。你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?空间复杂度:O(1)。只需要常数空间存放若干变量。找出给定目标值在数组中的开始位置和结束位置。给定一个按照升序排列的整数数组。如果数组中不存在目标值。原创 2024-07-10 17:09:40 · 190 阅读 · 0 评论 -
LeetCode 69、x 的平方根---二分法
时间复杂度:O*(log*x),即为二分查找需要的次数。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。空间复杂度:O(1)。原创 2024-07-10 15:26:21 · 195 阅读 · 0 评论 -
LeetCode 179、最大数---贪心算法
重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。输出结果可能非常大,所以你需要返回一个字符串而不是整数。原创 2024-07-09 21:50:14 · 225 阅读 · 0 评论 -
LeetCode 215、数组中的第 K 个最大元素---相向双指针(快速排序)---堆排序(优先队列)---DFS
堆排序,DFS原创 2024-07-09 14:41:32 · 174 阅读 · 0 评论 -
LC75. 颜色分类---单指针---双指针
给定一个包含红色、白色和蓝色、共n个元素的数组nums对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数01和2分别表示红色、白色和蓝色。必须在的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]原创 2024-07-09 10:44:46 · 296 阅读 · 0 评论 -
力扣16. 最接近的三数之和---相向双指针
给你一个长度为n的整数数组nums和 一个目标值target。请你从nums中选出三个整数,使它们的和与target最接近。返回这三个数的和。假定每组输入只存在恰好一个解。2与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。原创 2024-07-09 09:46:13 · 154 阅读 · 0 评论 -
LC15. 三数之和---相向双指针
给你一个包含n个整数的数组nums,判断nums中是否存在三个元素 *a,b,c ,*使得0?请你找出所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。原创 2024-07-09 09:32:03 · 191 阅读 · 0 评论 -
LC11. 盛水最多的容器---相向双指针
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai)。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。原创 2024-07-09 09:18:26 · 171 阅读 · 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 · 185 阅读 · 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 · 204 阅读 · 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 · 250 阅读 · 0 评论 -
LC42. 接雨水---DP---单调递减栈
给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-07-06 22:53:04 · 265 阅读 · 0 评论 -
长度最小的子数组
给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。原创 2024-06-28 10:35:52 · 223 阅读 · 0 评论 -
省份数量---邻接矩阵---DFS和BFS
是一组直接或间接相连的城市,组内不含其他没有相连的城市。个城市,其中一些彼此相连,另一些没有相连。的矩阵 isConnected。表示二者不直接相连。原创 2024-06-26 11:40:27 · 317 阅读 · 0 评论 -
DFS和BFS
【代码】DFS和BFS。原创 2024-06-26 11:19:06 · 159 阅读 · 0 评论 -
岛屿问题---DFS和BFS
给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。grid = [1。原创 2024-06-25 21:12:50 · 423 阅读 · 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 · 328 阅读 · 0 评论 -
分割等和子集---背包DP
给你一个的数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。原创 2024-06-24 20:58:41 · 189 阅读 · 0 评论 -
零钱兑换---背包DP---完全背包
给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1。原创 2024-06-24 20:36:40 · 151 阅读 · 0 评论 -
目标和---背包DP---0-1背包
给你一个整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个例如,,可以在2之前添加'+',在1之前添加'-',然后串联起来得到表达式"+2-1"。返回可以通过上述方法构造的、运算结果等于target的不同的数目。思路1.背包DP。原创 2024-06-24 19:58:49 · 289 阅读 · 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 · 638 阅读 · 0 评论 -
粉刷房子---状态DP
假如有一排房子,共n个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个n x 3的正整数矩阵costs来表示的。例如,表示第 0 号房子粉刷成红色的成本花费;表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。原创 2024-06-23 22:55:07 · 230 阅读 · 0 评论 -
不相交的线---二维DP
在两条独立的水平线上按给定的顺序写下nums1和nums2中的整数。现在,可以绘制一些连接两个数字nums1[i]和nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的。原创 2024-06-23 16:11:20 · 234 阅读 · 0 评论 -
马戏团人塔---LIS---DP 贪心+二分法优化
从上往下数,叠罗汉最多能叠 6 层:(56,90), (60,95), (65,100), (68,110), (70,150), (75,190)有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。原创 2024-06-23 11:54:41 · 134 阅读 · 0 评论 -
最长公共子序列---LCS---DP
给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace"是"abcde"的子序列,但"aec"不是"abcde"的子序列。两个字符串的是这两个字符串所共同拥有的子序列。原创 2024-06-23 10:13:09 · 156 阅读 · 0 评论 -
最长重复子数组---DP
给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。原创 2024-06-22 21:35:06 · 157 阅读 · 0 评论