C++算法
文章平均质量分 88
C++常用算法学习
南巷旧梦
现在在读研究生,以前写的博客太幼稚了,xdm不用关注,转载直接转就行。已经不写很久了了。谢谢大家。
展开
-
Master公式求递归复杂度
谁tm写摘要原创 2022-02-10 15:56:39 · 563 阅读 · 0 评论 -
C++算法学习(力扣:134. 加油站)
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输出原创 2020-11-18 17:52:51 · 163 阅读 · 0 评论 -
C++算法学习(力扣:402. 移掉K位数字)
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = "10200", k = 1输出: "200"解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。示原创 2020-11-15 15:29:57 · 426 阅读 · 0 评论 -
C++算法学习(力扣:859. 亲密字符串)
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。交换字母的定义是取两个下标 i 和 j (下标从 0 开始),只要 i!=j 就交换 A[i] 和 A[j] 处的字符。例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。示例 1:输入: A = "ab", B = "ba"输出: true解释: 你可以交换 A[0] = 'a' 和 A[1] = 'b' 生成 "原创 2020-11-14 23:35:41 · 156 阅读 · 0 评论 -
C++算法学习(力扣:1122. 数组的相对排序)
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length, arr2.lengt原创 2020-11-14 10:56:48 · 270 阅读 · 0 评论 -
C++算法学习(力扣:328. 奇偶链表)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6->原创 2020-11-13 15:43:00 · 122 阅读 · 0 评论 -
C++算法学习(力扣:1003. 检查替换后的词是否有效)
给定有效字符串 “abc”。对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。例如,如果 S = “abc”,则有效字符串的示例是:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的示例是:“abccba”,“ab”,“cababc”,“bac”。如果给定字符串 S 有效,则返回 true;否则,返回 false。示例 1原创 2020-11-12 22:13:12 · 107 阅读 · 0 评论 -
C++算法学习(力扣:1254. 统计封闭岛屿的数目)
有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。请返回封闭岛屿的数目。实例1:输入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1]原创 2020-11-08 14:03:23 · 383 阅读 · 0 评论 -
C++算法学习(力扣:1544. 整理字符串)
给你一个由大小写英文字母组成的字符串 s 。一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件:若 s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。若 s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯原创 2020-10-24 11:10:41 · 294 阅读 · 0 评论 -
C++算法学习(力扣:1091. 二进制矩阵中的最短路径)
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值为 grid[0][0])C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])如果 C_i 位于 (r, c),则 grid[r][c] 为原创 2020-10-21 11:25:26 · 643 阅读 · 0 评论 -
C++算法学习(力扣:面试题 16.04. 井字游戏)
设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" “)中。第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符。如果游戏存在获胜者原创 2020-10-20 11:14:55 · 1059 阅读 · 0 评论 -
C++算法学习(力扣:1269. 停在原地的方案数)
有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。示例 1:输入:steps = 3, arrLen = 2输出:4解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处。向右,向左原创 2020-10-19 17:33:08 · 189 阅读 · 0 评论 -
C++算法学习(力扣:201. 数字范围按位与)
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7] 输出: 4示例 2:输入: [0,1] 输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。开始的时候随手写了一个暴力原创 2020-10-19 13:11:24 · 246 阅读 · 0 评论 -
C++算法学习(力扣:面试题 04.04 检查平衡性)
力扣:面试题 04.04 检查平衡性实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2原创 2020-10-18 23:20:54 · 172 阅读 · 0 评论 -
C++算法学习(栈)
目录什么是栈?实践题目[155. 最小栈](https://leetcode-cn.com/problems/min-stack/)什么是栈?是一个运算受限制的线性表,只能在表尾进行插入和删除,也就是先进后出,后进先出。(新手检验搜一本算法图解,讲的很明白)实践题目155. 最小栈struct Node{ int val; int min; Node *next;};//建立结构体,写入题目要求的功能class MinStack {priva原创 2021-02-03 21:40:33 · 441 阅读 · 0 评论 -
C++算法学习(贪心算法)
贪心算法1、目标2、方法3、例题[122. 买卖股票的最佳时机 II](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/)1、目标不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。2、方法1、把求解的问题分成若干个子问题2、对每个子问题求解,得到子问题的局部最优解3、把子问题的解局部最优解合成原来解问题的一个解3、例题122. 买卖股票的最佳时机 IIclass Solution {pu原创 2020-12-12 15:31:06 · 177 阅读 · 0 评论 -
C++算法学习(动态规划算法)
动态规划算法1、目标2、方法3、过程4、例题(1)[力扣:5. 最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-substring/)1、目标是求解决策过程最优化的过程。2、方法把原问题分解成子问题进行求解,也就是分治的思想。3、过程主要分四步:划分子问题:把一个大问题分解为小问题状态表示:如何处理小问题。状态转移:也就是父问题如何推导出子问题。确定边界:确定初始状态是什么?最小的子问题?最终状态又是什么。4原创 2020-12-12 14:54:58 · 386 阅读 · 0 评论 -
C++算法学习(回溯算法)
回溯算法1、目标2、方法3、具体思路4、例题(1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-matching/)1、目标在搜索尝试过程中寻找问题的解2、方法当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。3、具体思路从一条路往前走,能进则进,不能进则退回来,换一条路再试。4、例题(1)力扣:10. 正则表达式匹配(这个题可以直接用正则,但是毫无意义,主要是练习回溯算法)c原创 2020-12-06 16:37:36 · 267 阅读 · 0 评论 -
C++算法学习(分支限界法)
分支限界法1、目标2、方法3、具体实现1、目标找到在约束条件下的最优解2、方法以广度优先或以最小耗费优先的方式搜索解空间树。3、具体实现在分支限界法中,每个活的结点都有一次机会成为扩展结点,一次性产生其所有儿子结点。不合适的儿子结点被淘汰,只留下合适的...原创 2020-12-05 20:24:23 · 1101 阅读 · 0 评论