自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

参考书籍:《C语言程序设计》《数据结构》、《C++ Primer》、《Effective C++》、《STL源码剖析》、《现代操作系统》、《图解TCP/IP》、《图解HTTP》、《Linux高性能服务器编程》、《剑指Offer》、《算法导论》

里面有知识点和代码详解等,有OJ也有笔试面试等选择及编程题,用博客模仿费曼记录自己编程的学习,更好深入学习和复习。(有问题/错误欢迎提出)

  • 博客(376)
  • 收藏
  • 关注

原创 Offer必备算法29_其它背包问题_二维费用背包+似包非包+卡特兰数

Offer必备算法29_其它背包问题_二维费用背包(①力扣474. 一和零(二维费用背包)+②力扣879. 盈利计划(二维费用背包)+③力扣377. 组合总和 Ⅳ(似包非包)+④力扣96. 不同的二叉搜索树(卡特兰数))。

2024-04-22 20:30:36 701

原创 每日OJ题_其它背包问题④_力扣96. 不同的二叉搜索树(卡特兰数)

每日OJ题_其它背包问题④_力扣96. 不同的二叉搜索树(卡特兰数)(这道题属于卡特兰数的一个应用,同样能解决的问题还有合法的进出栈序列、括号匹配的括号序列、电影购票等等。如果感兴趣的可以继续百度搜索卡特兰数,会有很多详细的介绍。)

2024-04-22 19:45:33 633

原创 每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)

每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)(需要知道的是背包问题本质上求的是组合数问题,而这一道题虽然题目是组合总数,但求的是排列数问题(排列是无序的,组合是有序的),题目感觉不太严谨。(虽然不能用背包问题解决,但代码类似背包问题,所以称为似包非包)用常规的 dp 思想来解决这道题。)

2024-04-22 12:34:22 539

原创 每日OJ题_其它背包问题②_力扣879. 盈利计划(二维费用01背包)

每日OJ题_其它背包问题②_力扣879. 盈利计划(二维费用01背包)(状态表示:dp[i][j][k] 表示:从前 i 个计划中挑选,总人数不超过 j ,总利润至少为 k ,一共有多少种选法。状态转移方程为:dp[i][j][k] = dp[i - 1][j][k] + dp[i - 1][j - g[i - 1]][max(0, k - p[i - 1])] ;)

2024-04-21 21:28:23 478

原创 每日OJ题_其它背包问题①_力扣474. 一和零(二维费用01背包)

每日OJ题_其它背包问题①_力扣474. 一和零(二维费用01背包)(在一些物品中挑选一些出来,然后在满足某个限定条件下,解决一些问题, 由于每一个物品都只有 1 个,因此是一个01 背包问题。 但是发现这一道题里面有两个限制条件。因此是一个二维费用的 01 背包问题。那么定义状态表示的时候,创建一个三维 dp 表,把第二个限制条件加上即可。状态表示:dp[i][j][k] 表示:从前 i 个字符串中挑选,字符 0 的个数不超过 j ,字符 1 的个数不超过 k ,所有的选法中,最大的长度。)

2024-04-21 15:32:01 743

原创 Offer必备算法28_多源BFS_四道力扣题详解(由易到难)

Offer必备算法28_多源BFS_四道力扣题详解(①力扣542. 01 矩阵+②力扣1020. 飞地的数量+③力扣1765. 地图中的最高点+④力扣1162. 地图分析)

2024-04-20 19:13:03 1307

原创 每日OJ题_多源BFS④_力扣1162. 地图分析

每日OJ题_多源BFS④_力扣1162. 地图分析(力扣542. 01 矩阵的变型题,这里的曼哈顿距离就是最短距离,正难则反,用多源BFS解决即可。)

2024-04-20 12:43:52 392

原创 每日OJ题_多源BFS③_力扣1765. 地图中的最高点

每日OJ题_多源BFS③_力扣1765. 地图中的最高点(力扣542. 01 矩阵的变型题,直接用多源BFS解决即可)

2024-04-19 22:07:02 279

原创 每日OJ题_多源BFS②_力扣1020. 飞地的数量

每日OJ题_多源BFS②_力扣1020. 飞地的数量(正难则反,从边上的 1 开始搜索,把与边上 1 相连的联通区域全部标记一下,然后再遍历一遍矩阵,看看哪些位置的 1 没有被标记即可标记的时候,可以用多源BFS解决。)

2024-04-19 15:24:19 319

原创 每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路原理)

每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路算法原理)(可以先把所有的 0 都放在队列中,把它们当成一个整体,每次把当前队列里面的所有元素向外扩展一次。可以开一个dist数组就能完成类似前面BFS解决最短路所需的bool数组,step和size变量:初始化成-1的话就是没遍历的,遍历的step只需在前一个格子加1,层数也能确定。)

2024-04-18 20:37:35 512 1

原创 Offer必备算法27_完全背包_四道力扣题(由易到难)

Offer必备算法27_完全背包_四道力扣题(①牛客DP42 【模板】完全背包+②力扣322. 零钱兑换+③力扣518. 零钱兑换 II+④力扣279. 完全平方数)(滚动数组优化)

2024-04-18 12:35:22 1457

原创 每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)

每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)(一维状态表示: dp[i] 表示:和为 i 的完全平方数的最少数量。状态转移方程:dp[i] = min(dp[i], dp[i - j * j] + 1)初始化:当 n = 0 的时候,没法拆分,结果为 0 ;当 n = 1 的时候,结果为 1 。填表顺序: 根据状态转移方程,仅需从左往右填表。返回值: 根据状态表示,返回 dp[n] 。)

2024-04-17 21:59:46 760

原创 每日OJ题_完全背包③_力扣518. 零钱兑换 II

每日OJ题_完全背包③_力扣518. 零钱兑换 II(在一些物品中挑选一些出来,然后在满足某个限定条件下,解决一些问题,大概率是背包模型。由于每一个物品都是无限多个的,因此是一个完全背包问题。接下来的分析就是基于完全背包的方式来。状态表示: dp[i][j] 表示:从前 i 个硬币中挑选,总和正好等于 j ,一共有多少种选法。状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i]] + 1)。(j >= coins[i] )

2024-04-17 14:46:07 928

原创 每日OJ题_完全背包②_力扣322. 零钱兑换

每日OJ题_完全背包②_力扣322. 零钱兑换(状态表示: dp[i][j] 表示:从前 i 个硬币中挑选,总和正好等于 j ,所有的选法中,最少的硬币个 数。状态转移方程:线性 dp 状态转移方程分析方式,一般都是根据最后一步的状况,来分情况讨论。状态转移方程为:dp[i][j]=min(dp[i - 1][j], dp[i - 1][j - coins[i]] + 1, dp[i - 1][j - 2*coins[i]] + 2......)

2024-04-16 21:43:42 960

原创 每日OJ题_完全背包①_牛客DP42 【模板】完全背包

每日OJ题_完全背包①_牛客DP42 【模板】完全背包(两个问题的解析+滚动数组优化,状态表示: dp[i][j] 表示:从前 i 个物品中挑选,总体积不超过 j ,所有的选法中,能挑选出来的最大价值。(这里和 01背包一样))

2024-04-16 17:39:37 872

原创 Offer必备算法26_BFS解决最短路_四道力扣题(由易到难)

Offer必备算法26_BFS解决最短路_四道力扣题(①力扣1926. 迷宫中离入口最近的出口+②力扣433. 最小基因变化+③力扣127. 单词接龙+④力扣675. 为高尔夫比赛砍树)

2024-04-15 19:01:56 1208

原创 每日OJ题_BFS解决最短路④_力扣675. 为高尔夫比赛砍树

每日OJ题_BFS解决最短路④_力扣675. 为高尔夫比赛砍树(先找出砍树的顺序,然后按照砍树的顺序,一个一个地用 bfs 求出最短路即可。求最短路就是力扣1926. 迷宫中离入口最近的出口。)

2024-04-15 18:27:38 318

原创 每日OJ题_BFS解决最短路③_力扣127. 单词接龙

每日OJ题_BFS解决最短路③_力扣127. 单词接龙(和力扣433. 最小基因变化一样,如果将每次字符串的变换抽象成图中的两个顶点和一条边的话,问题就变成了边权为 1 的最短路问题。 因此,从起始的字符串开始,来一次 bfs 即可。)

2024-04-15 17:19:35 345

原创 每日OJ题_BFS解决最短路②_力扣433. 最小基因变化

每日OJ题_BFS解决最短路②_力扣433. 最小基因变化(如果将每次字符串的变换抽象成图中的两个顶点和一条边的话,问题就变成了边权为 1 的最短路问题。 因此,从起始的字符串开始,来一次 bfs 即可。)

2024-04-15 14:28:22 290

原创 每日OJ题_BFS解决最短路①_力扣1926. 迷宫中离入口最近的出口

每日OJ题_BFS解决最短路①_力扣1926. 迷宫中离入口最近的出口(利用层序遍历来解决迷宫问题,是最经典的做法。我们可以从起点开始层序遍历,并且在遍历的过程中记录当前遍历的层数。这样就能在找到出口的时候,得到起点到出口的最短距离。)

2024-04-15 12:43:37 584

原创 Offer必备算法25_01背包_四道力扣题详解(由易到难)

Offer必备算法25_01背包_四道力扣题详解(①牛客DP41 【模板】01背包+②力扣416. 分割等和子集+③力扣494. 目标和+④力扣1049. 最后一块石头的重量 II)

2024-04-14 19:42:35 1380

原创 每日OJ题_01背包④_力扣1049. 最后一块石头的重量 II

每日OJ题_01背包④_力扣1049. 最后一块石头的重量 II(任意两块石头在⼀起粉碎,重量相同的部分会被丢掉,重量有差异的部分会被留下来。那就 相当于在原始的数据的前面,加上加号或者减号,是最终的结果最小即可。也就是说把原始的石头分成两部分,两部分的和越接近越好。又因为当所有元素的和固定时,分成的两部分越接近数组总和的一半,两者的差越小。因此问题就变成了:在数组中选择一些数,让这些数的和尽量接近 sum / 2 ,如果把数看成物品,每个数的值看成体积和价值,即01背包问题 )

2024-04-14 13:23:29 778

原创 每日OJ题_01背包③_力扣494. 目标和(dp+滚动数组优化)

每日OJ题_01背包③_力扣494. 目标和(dp+滚动数组优化)(以某个位置为结尾,结合题目要求,定义一个状态表示:dp[i][j] 表示:在前 i 个数中选,总和正好等于 j ,一共有多少种选法。状态转移方程:​​​​​​​ if(j >= nums[i - 1]) dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]] ; elsedp[i][j] = dp[i - 1][j] ;(如果多加一行一列,找原数组下标要减1))

2024-04-13 22:03:30 624

原创 每日OJ题_01背包②_力扣416. 分割等和子集

每日OJ题_01背包②_力扣416. 分割等和子集(思考能不能将问题转化成自己熟悉的题型:如果数组能够被分成两个相同元素之和相同的子集,那么原数组必须有下面几个性质:所有元素之和应该是一个偶数。数组中最大的元素应该小于所有元素总和的一半;挑选一些数,这些数的总和应该等于数组总和的一半。根据前两个性质可以提前判断数组能够被划分。根据最后一个性质,可以发现问题能转化成01背包的模型:状态表示:dp[i][j] 表示:从前 i 个物品中挑选,总体积不超过 j ,所有的选法中,能否凑成总和为 j 这个数)

2024-04-13 13:07:00 1018

原创 每日OJ题_01背包①_牛客DP41 【模板】01背包(滚动数组优化)

每日OJ题_01背包①_牛客DP41 【模板】01背包(滚动数组优化)(背包问题的状态表示非常经典,如果不知道怎么来的,可以先把它当成一个模板。以某个位置为结尾,结合题目要求,定义一个状态表示:dp[i][j] 表示:从前 i 个物品中挑选,总体积不超过 j ,所有的选法中,能挑选出来的最大价值。状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i]) ;。​​​​​​​背包问题基本上都是利用滚动数组来做空间上的优化:(时间也有常数优化)

2024-04-12 22:03:51 969

原创 Offer必备算法24_BFS解决FloodFill_四道力扣题详解(由易到难)

Offer必备算法24_BFS解决FloodFill_四道力扣题详解(BFS解决FloodFill简介+①力扣733. 图像渲染+②力扣200. 岛屿数量+③力扣695. 岛屿的最大面积+④力扣130. 被围绕的区域)

2024-04-12 15:49:00 1224

原创 每日OJ题_BFS解决FloodFill④_力扣130. 被围绕的区域

每日OJ题_BFS解决FloodFill④_力扣130. 被围绕的区域(正难则反。 可以先利用 bfs 将与边缘相连的 'O' 区域修改成无关字符,然后重新遍历矩阵,将没有标记过的 'O' 全修改成 'X' 即可,再把无关字符全还原成'O'。)

2024-04-11 22:45:22 275

原创 每日OJ题_BFS解决FloodFill③_力扣695. 岛屿的最大面积

每日OJ题_BFS解决FloodFill③_力扣695. 岛屿的最大面积(解析:遍历整个矩阵,每当遇到一块土地的时候,就用深搜或者宽搜将与这块土地相连的整个岛屿的面积计算出来。然后在搜索得到的所有的岛屿面积求一个最大值即可。在搜索过程中,为了防止搜到重复的土地,可以开一个同等规模的bool数组,标记一下这个位置是否已经被访问过,也可以将原始矩阵的 1 修改成 0 ,但是这样操作会修改原始矩阵。)

2024-04-11 15:31:08 329

原创 每日OJ题_BFS解决FloodFill②_力扣200. 岛屿数量

每日OJ题_BFS解决FloodFill②_力扣200. 岛屿数量(遍历整个矩阵,每次找到一块陆地的时候:说明找到一个岛屿,记录到最终结果 ret 里面。并且将这个陆地相连的所有陆地,也就是这块岛屿,全部变成海洋。这样的话,下次遍历到这块岛屿的时候,它已经是海洋了,不会影响最终结果。其中变成海洋的操作,可以利用深搜或宽搜解决,其实就是力扣733.图像渲染这道题。这样,遍历完全部的矩阵的时候, ret 存的就是最终结果。这里用全局bool数组来判断陆地是否被遍历过,也可以直接修改数组。)

2024-04-10 18:56:55 364

原创 每日OJ题_BFS解决FloodFill①_力扣733. 图像渲染

每日OJ题_BFS解决FloodFill①_力扣733. 图像渲染(BFS解决FloodFill洪水灌溉算法简介)(可以利用深搜或者宽搜,遍历到与该点相连的所有像素相同的点,然后将其修改成指定的像素即可。后面深搜专题用深搜写,这里用宽搜写。)

2024-04-10 12:39:58 832

原创 Offer必备算法23_两个数组dp_八道力扣题详解(由易到难)

Offer必备算法23_两个数组dp_八道OJ详解(①力扣1143. 最长公共子序列+②力扣1035. 不相交的线+③力扣115. 不同的子序列+④力扣44. 通配符匹配+⑤力扣10. 正则表达式匹配+⑥力扣97. 交错字符串+⑦力扣712. 两个字符串的最小ASCII删除和+⑧力扣718. 最长重复子数组)

2024-04-09 18:27:51 1110

原创 每日OJ题_两个数组dp⑧_力扣718. 最长重复子数组

每日OJ题_两个数组dp⑧_力扣718. 最长重复子数组(子数组是数组中连续的⼀段,习惯上以某一个位置为结尾来研究。由于是两个数组, 因此可以尝试:以第一个数组的 i 位置为结尾以及第二个数组的 j 位置为结尾来解决问题。状态表示:结合题目得到:dp[i][j] 表示以第一个数组的 i 位置为结尾,以及第二个数组的 j 位置为结尾公共的 、长度最长的子数组的长度。状态转移方程:dp[i][j] = 1 + dp[i - 1][j - 1],nums1[i] != nums2[j] 时 为 0)

2024-04-09 11:17:10 336

原创 每日OJ题_两个数组dp⑦_力扣712. 两个字符串的最小ASCII删除和

每日OJ题_两个数组dp⑦_力扣712. 两个字符串的最小ASCII删除和(正难则反:求两个字符串的最小 ASCII 删除和,其实就是找到两个字符串中所有的公共子序列里面, ASCII 最大和。 因此思路就是按照最长公共子序列的分析方式来分析。状态表示:dp[i][j] 表示s1 的 [0, i] 区间以及 s2 的 [0, j] 区间内的所有的子序列中,公共子序列的 ASCII 最大和。​​​​​​​状态转移方程:当 s1[i - 1] == s2[j - 1] 时, dp[i][j] = max(d)

2024-04-09 08:49:56 615

原创 每日OJ题_两个数组dp⑥_力扣97. 交错字符串

每日OJ题_两个数组dp⑥_力扣97. 交错字符串(状态表示:对于两个字符串之间的 dp 问题,一般的思考方式如下:选取第一个字符串的 [0, i] 区间以及第二个字符串的 [0, j] 区间当成研究对象,结合题目的要求来定义状态表示。然后根据两个区间上最后一个位置的字符,来进行分类讨论,从而确定状态转移方程。dp[i][j] 表示字符串 s1 中 [1, i] 区间内的字符串以及 s2 中 [1, j] 区间内的字符串,能否拼接成 s3 中 [1, i + j] 区间内的字符串。)

2024-04-08 21:57:08 1057

原创 每日OJ题_两个数组dp⑤_力扣10. 正则表达式匹配

每日OJ题_两个数组dp⑤_力扣10. 正则表达式匹配(状态表示:对于两个字符串之间的 dp 问题,一般的思考方式如下:选取第⼀个字符串的 [0, i] 区间以及第⼆个字符串的 [0, j] 区间当成研究对象,结合题目的要求来定义状态表示。然后根据两个区间上最后一个位置的字符,来进行分类讨论,从而确定状态转移方程。dp[i][j] 表示:字符串 p 的 [0, j] 区间和字符串 s 的 [0, i] 区间是否可以匹配。)

2024-04-08 20:27:11 1166

原创 每日OJ题_两个数组dp④_力扣44. 通配符匹配

每日OJ题_两个数组dp④_力扣44. 通配符匹配(状态表示:对于两个字符串之间的 dp 问题,我们一般的思考方式如下:选取第⼀个字符串的 [0, i] 区间以及第⼆个字符串的 [0, j] 区间当成研究对象,结合题目的要求来定义状态表示。然后根据两个区间上最后一个位置的字符,来进行分类讨论,从而确定状态转移方程。dp[i][j] 表示: p 字符串 [0, j] 区间内的子串能否匹配字符串 s 的 [0, i] 区间内的子串。)

2024-04-08 18:42:23 735

原创 每日OJ题_两个数组dp③_力扣115. 不同的子序列

每日OJ题_两个数组dp③_力扣115. 不同的子序列(状态表示:对于两个字符串之间的 dp 问题,一般的思考方式如下:选取第一个字符串的 [0, i] 区间以及第二个字符串的 [0, j] 区间当成研究对象,结合题目的要求来定义状态表示。然后根据两个区间上最后一个位置的字符,来进行分类讨论,从而确定状态转移方程。dp[i][j] 表示:在字符串 s 的 [0, j] 区间内的所有子序列中,有多少个 t 字符串 [0, i] 区间内的子串。)

2024-04-08 12:52:16 929

原创 每日OJ题_两个数组dp②_力扣1035. 不相交的线

每日OJ题_两个数组dp②_力扣1035. 不相交的线(如果要保证两条直线不相交,那么我们下一个连线必须在上一个连线对应的两个元素的后面寻找相同的元素。这不就转化成最长公共子序列的模型了吗。那就是在这两个数组中寻找最长的公共子序列。 只不过是在整数数组中做一次最长的公共子序列,代码几乎一模一样)

2024-04-08 10:59:02 851

原创 每日OJ题_两个数组dp①_力扣1143. 最长公共子序列

每日OJ题_两个数组dp①_力扣1143. 最长公共子序列(对于两个数组的动态规划,定义状态表示的经验就是:选取第一个数组 [0, i] 区间以及第二个数组 [0, j] 区间作为研究对象。结合题目要求,定义状态表示。在这道题中,根据题目定义状态表示为:dp[i][j] 表示: s1 的 [0, i] 区间以及 s2 的 [0, j] 区间内的所有的子序列中,最长公共子序列的长度)

2024-04-07 21:58:37 1046

原创 Offer必备算法22_优先级队列_堆_四道力扣题详解(由易到难)

Offer必备算法22_优先级队列_堆_四道力扣题详解(①力扣1046. 最后一块石头的重量+②力扣703. 数据流中的第 K 大元素+③力扣692. 前K个高频单词+④力扣295. 数据流的中位数)

2024-04-07 12:33:17 1251

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除