
每日OJ题(C++_力扣_牛客)
文章平均质量分 63
存放一些力扣和牛客网的OJ代码和题目
GR鲸鱼
C/C++领域新星创作者,阿里云社区专家博主,中长跑,C语言,数据结构与算法,C++,Linux,计算机网络,系统/网络编程,MySQL数据库,Docker,Redis,Qt,Java。(建议按顺序看专栏)
展开
-
每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java
每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java(利用前缀和的思想,求种类个数在 [l, r] 区间内子串的个数,等于求 [1, r] 区间内个数 - [1, l - 1] 区间内个数。求种类个数在 [1, count] 区间内子串的个数,可以用滑动窗口来求解。)原创 2025-03-20 23:51:42 · 553 阅读 · 0 评论 -
每日OJ_牛客_MT1最大差值_模拟+贪心_C++_Java
每日OJ_牛客_MT1最大差值_模拟+贪心_C++_Java(遍历数组的过程中,使用一个变量标记一下当前位置之前所有元素的最小值即可。)原创 2025-03-18 23:09:47 · 219 阅读 · 0 评论 -
每日OJ_牛客_过桥_贪心+BFS_C++_Java
每日OJ_牛客_过桥_贪心+BFS_C++_Java(涉及图论最短路)原创 2025-03-12 23:02:23 · 452 阅读 · 0 评论 -
每日OJ_牛客_宵暗的妖怪_DP_C++_Java
每日OJ_牛客_宵暗的妖怪_DP_C++_Java(打家劫舍问题)原创 2025-03-07 23:21:39 · 404 阅读 · 0 评论 -
每日OJ_牛客_MT2棋子翻转_模拟_C++_Java
每日OJ_牛客_MT2棋子翻转_模拟_C++_Java(模拟即可。注意点:如何访问上下左右四个方向。访问的时候不要越界。下标的对应关系。如何优雅地翻转。)原创 2025-03-06 23:06:05 · 373 阅读 · 0 评论 -
每日OJ_牛客_合唱队形_DP_C++_Java
每日OJ_牛客_合唱队形_DP_C++_Java(动态规划题目是求出最少出来几人满足队形,反向思考 求满足队形的最多人数是多少? 这个题目左边的身高要比当前身高小,右边也是要比当前身高小并且是线性。与求最长的升序子序列问题类似,只不过本题目需要从两个维度去思考,左边和右边,左边是升序,右边降序。 思路: 单考虑左边, 算上自己总共有几人满足,这与最长的升序子序列可以说是一样了。 单考虑右边,不算自己(左边的时候已经算了, 在算的话,当前的身高会重复一次),总共有几人满足; 最后算出当前位置 左边和右边满足)原创 2025-03-05 22:57:57 · 512 阅读 · 0 评论 -
每日OJ_牛客_NC316体育课测验(二)_拓扑排序_C++_Java
每日OJ_牛客_NC316体育课测验(二)_拓扑排序_C++_Java(起始时,将所有入度为 0 的节点进行入队(入度为 0,说明没有边指向这些节点,将它们放到拓扑排序的首部,不会违反拓扑序定义)。从队列中进行节点出队操作,出队序列就是对应我们输出的拓扑序。对于当前弹出的节点 x,遍历x 的所有出度y,即遍历所有由 x直接指向的节点y,对y做入度减一操作(因为x节点已经从队列中弹出,被添加到拓扑序中,等价于x节点从有向图中被移除,相应的由x发出的边也应当被删除,带来的影响是与 x相连的节点y的入度减一)。原创 2025-03-02 23:00:30 · 725 阅读 · 0 评论 -
每日OJ_牛客_游游的字母串_枚举_C++_Java
每日OJ_牛客_游游的字母串_枚举_C++_Java(英文字母一共就26个,因此可以直接暴力枚举以每个字母作为最后的转变字母。最后去最小值即可。)原创 2025-03-04 23:00:13 · 556 阅读 · 0 评论 -
每日OJ_牛客_最少的完全平方数_完全背包_C++_Java
每日OJ_牛客_最少的完全平方数_完全背包_C++_Java(转化为完全背包问题,每种物品数量不限。物品重量等于索引加一的平方,物品价值等于1,表示数量加1。物品遍历顺序从大到小,因为越大的物品使用数量越少。背包重量遍历顺序从小到大,因为是完全背包。dp初始化为INT32_MAX,表示数量无限多。dp[0]等于0,因为没有重量,所以不需要物品。)原创 2024-11-23 22:56:26 · 448 阅读 · 0 评论 -
每日OJ题_牛客_字符编码_哈夫曼编码_C++_Java
每日OJ题_牛客_字符编码_哈夫曼编码_C++_Java(哈夫曼编码模板题:哈夫曼编码(Huffman Coding)是一种被广泛使用的可变长度编码方式,由David A. Huffman在1952年提出。它主要用于数据压缩领域,特别是当数据的某些部分比其他部分更频繁地出现时。哈夫曼编码基于一种贪心算法来构建一棵最优二叉树(通常称为哈夫曼树),用于对数据进行编码。)原创 2024-11-22 22:45:00 · 347 阅读 · 0 评论 -
每日OJ题_牛客_神奇的字母(二)_哈希+字符串_C++_Java
每日OJ题_牛客_神奇的字母(二)_哈希+字符串_C++_Java(哈希表,进行多组输入,然后用数组记录字母出现次数即可。)原创 2024-11-22 13:14:47 · 337 阅读 · 0 评论 -
每日OJ题_牛客_DP40小红取数_01背包+同余_C++_Java
每日OJ题_牛客_DP40小红取数_01背包+同余_C++_Java(状态定义:首先定义一个二维dp数组,dp[i][j]表示前i个数中除以k的余数为j的当前最大和。状态初始化:0个数时,最大和必为0,所以dp[0][0]=0。状态转移:如果前一个状态余数为j,则更新当前余数为(j+arr[i])%k的情况,要么从余数为j的状态转化过来,要么前一个状态余数也是(j+arr[i])%k,即不选择当前元素。所以dp[i][(int)((j+arr[i])。)原创 2024-11-20 12:38:16 · 411 阅读 · 0 评论 -
每日OJ题_牛客_dd爱旋转_模拟_C++_Java
每日OJ题_牛客_dd爱旋转_模拟_C++_Java(代数法分析对于每一种变化,我们可以用代数的方法将其表示出来第二种变化:a[i][j] --> a[n - i + 1][j]第一种变化:a[i][j] --> a[n - i + 1][n - j + 1]最有意思的在于我们如果尝试对翻转的再翻转或者镜像的再镜像,其 i,j 的位置是会复原的(废话)于是我们知道 x --> n - x + 1 这个变化是自反的(通过两次这样的变化其值又会变回 x )原创 2024-11-19 23:02:39 · 417 阅读 · 0 评论 -
每日OJ题_牛客_天使果冻_递推_C++_Java
每日OJ题_牛客_天使果冻_递推_C++_Java(需要两个数组绑定后排序,因此可以搞一个 pair 存一下,然后排序。)原创 2024-11-19 22:48:07 · 485 阅读 · 0 评论 -
每日OJ题_牛客_DP18滑雪_记忆化搜索_C++_Java
每日OJ题_牛客_DP18滑雪_记忆化搜索_C++_Java(读取输入,初始化矩阵存储滑雪场的高度信息,初始化dp数组用于存储从每个位置出发的最长滑道长度。初始化dx和dy数组表示四个可能的移动方向。定义dfs(x, y)函数,该函数返回从位置(x, y)开始的最长滑道长度。如果dp[x][y]不为0,说明已经计算过,直接返回。否则,初始化dp[x][y]为1(即当前位置少构成长度为1的滑道)。尝试向四个方向移动,如果新位置(nx, ny)的高度低于当前位置,则递归调用d)原创 2024-11-18 22:45:00 · 302 阅读 · 0 评论 -
每日OJ题_牛客_NC51合并k个已排序的链表_C++_Java
每日OJ题_牛客_NC51合并k个已排序的链表_C++_Java(可以直接准备kk个指针,每次比较得出kk个数字中的最小值。为了快速比较k个数字得到最小值,可以利用Java提供的PriorityQueue或者C++SLT提供的优先队列实现,它是一种参照堆排序的容器,容器中的元素是有序的,如果是小顶堆,顶部元素就是最小的,每次可以直接取出最小的元素。也就是说每次该容器中有k个元素,我们可以直接拿出最小的元素,再插入下一个元素,相当于每次都是链表的k个指针在比较大小,只移动最小元素的指针。)原创 2024-11-18 12:00:00 · 435 阅读 · 0 评论 -
每日OJ题_牛客_NC114旋转字符串_C++_Java
每日OJ题_牛客_NC114旋转字符串_C++_Java(第一种解法:按照题目的要求模拟,每次旋转⼀下 A 字符串,看看是否和 B 字符串相同。第二种解法:需要找到字符串旋转之后能匹配所满足的性质。如果 A 字符串能够旋转之后得到 B 字符串的话,在 A 字符串倍增之后的新串中,⼀定是可以找到B 字符串的。因此仅需让 A 字符串倍增,然后查找 B 字符串即可。)原创 2024-11-16 13:27:51 · 460 阅读 · 0 评论 -
每日OJ题_牛客_DP36 abb_C++_Java
每日OJ题_牛客_DP36 abb_C++_Java(用abb中第一个出现的b来考虑,一个字符作为第一b能产生的abb字符,等于它后面相同的字符数量(意味着还能凑成多少个bb)乘以它前面与它不相同的字符数量(可以被当作a的)。于是先记录每一个字符总出现的次数。然后再遍历字符串记录每个字符已经出现的次数和后面还没出现的次数。)原创 2024-11-15 22:45:00 · 464 阅读 · 0 评论 -
每日OJ题_牛客_AB32【模板】哈夫曼编码_C++_Java
每日OJ题_牛客_AB32【模板】哈夫曼编码_C++_Java(哈夫曼编码是一种非常有效的数据压缩方法,特别适用于那些符号频率分布不均匀的数据。然而,由于需要构建哈夫曼树和生成编码,因此哈夫曼编码的压缩和解压过程相对较慢。此外,哈夫曼编码生成的压缩数据是自适应的,即不同的数据可能生成不同的哈夫曼树和编码,因此通常需要在压缩数据中附带哈夫曼树的信息以便于解压。)原创 2024-11-15 18:47:54 · 962 阅读 · 0 评论 -
每日OJ题_牛客_HJ9提取不重复的整数_模拟_C++_Java
每日OJ题_牛客_HJ9提取不重复的整数_模拟_C++_Java(首先循环提取输入数的最低位,维护一个大小为10的数组,判断数组中是否有提取的这个数位。如果有则把输入数除等于10,继续提取下一数位。如果没有仍要把输入数除等于10,并将此数位添加到数组中,结果乘10再加上此数位.提取到最高位即可输出结果。)原创 2024-11-14 23:00:14 · 353 阅读 · 0 评论 -
每日OJ题_牛客_计算字符串的编辑距离_DP_C++_Java
每日OJ题_牛客_计算字符串的编辑距离_DP_C++_Java(计算字符串的编辑距离(也称为Levenshtein距离)是一个经典的动态规划问题。编辑距离是指将一个字符串转换成另一个字符串所需的最少编辑操作次数,其中编辑操作包括插入、删除和替换一个字符。子状态:word1的前1,2,3,...m个字符转换成word2的前1,2,3,...n 个字符需要的编辑距离。)原创 2024-11-14 21:11:31 · 508 阅读 · 0 评论 -
每日OJ题_牛客_求和_DFS_C++_Java
每日OJ题_牛客_求和_DFS_C++_Java(递归型枚举,DFS+回溯。)原创 2024-11-13 23:08:05 · 401 阅读 · 0 评论 -
每日OJ题_牛客_奇数位丢弃_找规律/模拟_C++_Java
每日OJ题_牛客_奇数位丢弃_找规律/模拟_C++_Java(通过两个例子的模拟发现,每次起始删除的下标都是 2 的次方。 根据这个规律,找到最后一次删除的起始位置的下标即可。)原创 2024-11-13 15:44:12 · 473 阅读 · 0 评论 -
每日OJ题_牛客_NC138矩阵最长递增路径_记忆化搜索_C++_Java
每日OJ题_牛客_NC138矩阵最长递增路径_记忆化搜索_C++_Java(递归改记忆化搜索即可。矩阵内是非负数,求最长的递增路径的长度。移动方向可以是上下左右,不能超出边界,这将是递归的判定条件。同一条路径不能有重复的单元格,需要有记忆。)原创 2024-11-12 23:05:11 · 516 阅读 · 0 评论 -
每日OJ题_牛客_kotori和迷宫_BFS_C++_Java
每日OJ题_牛客_kotori和迷宫_BFS_C++_Java(BFS迷宫问题小拓展,注意下面的dist数组。)原创 2024-11-12 21:07:57 · 563 阅读 · 0 评论 -
每日OJ题_牛客_BC76[NOIP2008]ISBN模拟_DFS_C++_Java
每日OJ题_牛客_BC76[NOIP2008]ISBN号码_模拟_C++_Java(模拟题,思路:找到每一个数字,从左到右,依次将前面 9 位数字分别乘以 1,2,3,……,9,再求和,用所得的和模 11 (若模的结果为 10,则结果为 X) 和最后一位相同,则说明是合法的,输出 Right,否则将最后一位改为正确的,再将号码输出。)原创 2024-11-11 22:58:59 · 1046 阅读 · 0 评论 -
每日OJ题_牛客_JZ38字符串的排列_DFS_C++_Java
每日OJ题_牛客_JZ38字符串的排列_DFS_C++_Java(这是一个典型的排列问题,形如“给定一组数据,求这些数据所有的排列情况”,在这里一组数据就是字符串的字符。字符串的排列情况就是,每次需要选择一个字符(不能重复选择),按照顺序将选择的字符连接起来。)原创 2024-11-11 20:17:21 · 594 阅读 · 0 评论 -
每日OJ题_牛客_NC402包含不超过两种字符的最长子串_滑动窗口_C++_Java
每日OJ题_牛客_NC402包含不超过两种字符的最长子串_滑动窗口_C++_Java(双指针,右指针遍历记录字符串出现的个数,当超过条件时,移动左指针直到满足条件,更新最大字符串长度。)原创 2024-11-10 23:28:00 · 324 阅读 · 0 评论 -
每日OJ题_牛客_DP3跳台阶扩展问题_C++_Java
每日OJ题_牛客_DP3跳台阶扩展问题_C++_Java(假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1); 假定第一次跳的是2阶,那么剩下的是n-2个台 阶,跳法是f(n-2); 假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)...... 假定第一次跳的是n-1阶, 那么剩下的是1个台阶,跳法是f(1); 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种;有一阶的时候 f(1) = 1 ; 有两阶的时候可以有 f(2) = 1+f(1)=2; 有三阶的时候可以)原创 2024-11-10 17:09:36 · 376 阅读 · 0 评论 -
每日OJ题_牛客_WY6合唱团_最大乘积dp_C++_Java
每日OJ题_牛客_WY6合唱团_最大乘积dp_C++_Java(要连续求k个同学的乘积最大值,首先分析是否存在过渡态呢?前k-1个同学的所得结果应当是在第k个同学之前,k-1个同学的乘积最大值。因此可以从1开始逐渐去寻找各个同学作为最后一个同学时的乘积最大值,当然因为含有负值,还需要考虑最小值。这样的存储结构是最难想到的,可以选择一个尽量容量比较大的存储结构,多存储一些情况,基本上二维的存储结构就差不多了。另外,由于涉及到乘积,而且是多达几十次的乘积,需要使用long long的数据类型。)原创 2024-11-09 20:37:43 · 367 阅读 · 0 评论 -
每日OJ题_牛客_AB31活动安排_区间贪心_C++_Java
每日OJ题_牛客_AB31活动安排_区间贪心_C++_Java(区间问题的贪心:排序,然后分情况讨论,看看是合并还是求交集。)原创 2024-11-08 23:22:28 · 418 阅读 · 0 评论 -
每日OJ题_牛客_BC157素数回文_数学_C++_Java
每日OJ题_牛客_BC157素数回文_数学_C++_Java(如果p是一个质数,而且整数a与p互质(即最小公因数gcd(a,p)=1),则有a^(p−1)≡1(modp)(模p同余符号)。但是这个命题的逆命题不一定能判断一个数是否为素数,只能说明不满足a^(p−1)≡1(modp)条件的p一定是合数。在本算法里,主要就是运用了它的逆命题来检验素数的。)原创 2024-11-08 20:12:59 · 516 阅读 · 0 评论 -
每日OJ题_牛客_DP59数位染色_01背包_C++_Java
每日OJ题_牛客_DP59数位染色_01背包_C++_Java(选出一个最高达18位数的整数nn十进制中的一些位,这些位数字和等于没选的位的数字和,如果可以输出Yes,否则输出No。)原创 2024-11-07 23:29:10 · 519 阅读 · 0 评论 -
每日OJ题_牛客_春游_贪心+数学_C++_Java
每日OJ题_牛客_春游_贪心+数学_C++_Java(优先选性价比最高的,然后小部分改动。考虑如果先选2更优,那么最多可能选1个3,因为2和3的最小公倍数是6,如果选了2个3不如选3个2。再考虑先选3更优,那么可能会选择1个2或者2个2,如果选择3个2不如选择2个3更优。所以从这5种情况里找最优解就好了。)原创 2024-11-07 22:59:47 · 489 阅读 · 0 评论 -
每日OJ题_牛客_小红的口罩_堆+贪心_C++_Java
每日OJ题_牛客_小红的口罩_堆+贪心_C++_Java(采取小根堆每次寻找最小值、然后删除最小值、同时加入原最小值翻倍后的值,复杂度均为O(1)。大概答案最多是n天,于是总复杂度O(n)。)原创 2024-11-06 23:13:22 · 544 阅读 · 0 评论 -
每日OJ题_牛客_最长公共子序列_DP_C++_Java
每日OJ题_牛客_最长公共子序列_DP_C++_Java(子序列即两个字符串中公共的字符,但不一定连续。从题干中可以提取出问题:求字符串s和t的最长公共子序列 假设LCS(m,n)为长度为m的字符串s与长度为n的字符串t的最长公共子序列,直接进行求解时不太 好求解,那么可以将问题简化为其子问题,假设s和t的长度为任意值i和j,即求LCS(i,j):)原创 2024-11-06 19:56:25 · 551 阅读 · 0 评论 -
每日OJ题_牛客_相差不超过k的最多数_滑动窗口_C++_Java
每日OJ题_牛客_相差不超过k的最多数_滑动窗口_C++_Java(排序容易想,但是滑动窗口不容易想到,核心思想:使用滑动窗口算法通过动态调整窗口的大小,遍历所有符合条件的连续子序列,求得最大连续子序列的长度。)原创 2024-11-04 23:24:03 · 707 阅读 · 0 评论 -
每日OJ题_牛客_爱吃素_数学_C++_Java
每日OJ题_牛客_爱吃素_数学_C++_Java(判断两数相乘是否是素数。不能直接乘起来然后判断,因为数据量太大了,不仅存不下,而且会超时。因此根据素数的性质,分类讨论。)原创 2024-11-04 20:50:02 · 532 阅读 · 0 评论 -
每日OJ题_牛客_最长上升子序列(二)_贪心+二分_C++_Java
每日OJ题_牛客_最长上升子序列(二)_贪心+二分_C++_Java(在考虑最长递增子序列的长度的时候,其实并不关心这个序列长什么样子,只是关心最后⼀个元素是谁。这样新来一个元素之后,我们就可以判断是否可以拼接到它的后面。因此可以创建一个数组,统计长度为 x 的递增子序列中,最后一个元素是谁。为了尽可能地让这个序列更长,仅需统计长度为 x 的所有递增序列中最后一个元素的最小值。统计的过程中发现,数组中的数呈现递增趋势,因此可以使用二分来查找插入位置。)原创 2024-11-03 19:50:08 · 467 阅读 · 0 评论 -
每日OJ题_牛客_消减整数_贪心+数学_C++_Java
每日OJ题_牛客_消减整数_贪心+数学_C++_Java(贪心 + 数学:尽可能的翻倍。不能无脑翻倍,只能是 2 * cur 的倍数时,才能翻倍。)原创 2024-11-02 23:56:50 · 408 阅读 · 0 评论