随笔分类 - LeetCode刷题笔记
初学数据结构与算法,为面试做准备,但是做过的题第二次遇见还是无从下手,所以尝试开始记录一下解题思路,希望对自己的编程能力能有帮助。
摘要:动态规划——53. 最大子序和 题目: 思路: dp数组的定义:dp[n] 代表在nums[n]时的最大子序和。 base_case:dp[0] = nums[0] 状态转移方程:dp[i] = max(nums[i], dp[i-1]+nums[i]) 设置一个res存储最大自序和。 代码: cl
阅读全文
摘要:动态规划——NC19. 子数组的最大累加和问题 题目: 思路: dp数组的定义:dp[m] 代表在arr[m]时的最大子数组和 base_case: 状态转移方程:化简了,思路就是要么加入之前的,要么另起炉灶。 代码: class Solution { public: /** * max sum o
阅读全文
摘要:动态规划——1312. 让字符串成为回文串的最少插入次数 题目: 思路: dp数组的定义:dp[i] [j] 代表的是字符串s [i, ... , j]成为回文串的最少插入次数 base_case:i == j 时,dp[i] [j] = 0 状态转移方程:咋想的呢就是相等的话,就不变; 不相等的话
阅读全文
摘要:动态规划——72. 编辑距离 题目: 思路: dp数组的定义:dp[i] [j]代表word1[0, ... , i], word2[0, ... , j]的最小编辑距离。 base_case:就是分别考虑i=0的情况 for(int i = 0; i <= m; i++){dp[i][0] = i
阅读全文
摘要:动态规划——516. 最长回文子序列 题目: 思路: dp数组的定义:dp[i] [j]代表在字串s [i , ... , j ] 中,最长回文子序列的长度。 base_case:dp[i] [i] = 1 状态转移方程: if (s[i] == s[j]) // 它俩一定在最长回文子序列中 dp[
阅读全文
摘要:动态规划——712. 两个字符串的最小ASCII删除和 题目: 思路: 这题还是装换为最长公共子序列问题,然后的这题特殊的是ascii码值. 所以我们的dp数组定义变为:dp[i] [j]代表 str1[0 , ... , i] 和 str2[0 , ... , j] 最长公共子序列的ascii码值
阅读全文
摘要:动态规划——583. 两个字符串的删除操作 题目: 思路: 就是要把问题转换一下,他说是求word1和word2相同所需的最小步数,其实就是求word1和word2分别变为他们的最长公共子序列的最小步数和。然后问题就变为了最长公共子序列问题,继续求解就行了。 代码: class Solution {
阅读全文
摘要:动态规划——1143. 最长公共子序列 题目: 思路: dp数组的定义:二维dp数组,dp[i] [j]代表在text1[0, ... , i-1]和text2[0, ... , j-1]时,两个字符串的最长公共子序列的长度。 base_case:dp[0] [j] = dp[i] [0] =0 状
阅读全文
摘要:动态规划——剑指 Offer 42. 连续子数组的最大和 题目: 思路: dp数组的定义:dp[i]是以 nums[i] 结尾的最大子数组和。 base_case:dp[0] = nums[0] 状态转移方程:dp[i]有两种「选择」,要么与前面的相邻子数组连接,形成一个和更大的子数组;要么不与前面
阅读全文
摘要:二叉搜索树——230. 二叉搜索树中第K小的元素 题目: 思路: 中序遍历+辅助计数,到k了就输出就行。 代码: class Solution { public: // 计数 int n=0; // 存放结果 int res; int kthSmallest(TreeNode* root, int
阅读全文
摘要:二叉树——剑指 Offer 27. 二叉树的镜像 题目: 思路: 中序遍历,其实就是翻转二叉树。 代码: class Solution { public: TreeNode* mirrorTree(TreeNode* root) { if(!root) return NULL; // 前序遍历 中
阅读全文
摘要:二叉树——662. 二叉树最大宽度 题目: 思路: 层序遍历+辅助队列,但是还有些小细节,参考题解后(https://leetcode-cn.com/problems/maximum-width-of-binary-tree/solution/cshuang-bai-de-yan-du-you-xi
阅读全文
摘要:二叉树——113. 路径总和 II 题目: 思路: 前序遍历+回溯 代码参考:https://leetcode-cn.com/problems/path-sum-ii/solution/cqian-xu-bian-li-jia-hui-su-by-qing-feng-seve/ 代码: class
阅读全文
摘要:二叉树——145. 二叉树的后序遍历 题目: 思路: 迭代,顺序是左右中 代码: class Solution { public: vector<int> postorderTraversal(TreeNode* root) { // 放结果 vector<int> res; postorder(r
阅读全文
摘要:二叉树——129. 求根节点到叶节点数字之和 题目: 思路: DFS(深度搜索)+回溯 代码: class Solution { public: int sumNumbers(TreeNode* root) { if (!root) return 0; int res = 0; dfs(root,
阅读全文
摘要:二叉树——958. 二叉树的完全性检验 题目: 思路: 参考了题解,依靠层序遍历。 代码: class Solution { public: bool isCompleteTree(TreeNode* root) { // 辅助栈帮助层序遍历 queue<TreeNode*> q; // 记录是否已
阅读全文
摘要:二叉搜索树——剑指 Offer 36. 二叉搜索树与双向链表 题目: 思路: 二叉搜索树,自然就是中序遍历,然后就是构建双向链表就可以了。构建双向链表部分有点忘记,又看了看才明白。然后就干就好了。 代码: class Solution { public: Node* treeToDoublyList
阅读全文
摘要:二叉搜索树——剑指 Offer 54. 二叉搜索树的第k大节点 题目: 思路: 二叉搜索树,自然想到中序遍历,然后得到一个有序数组,然后就可以解决了。 代码: class Solution { public: vector<int> res; void dfs(TreeNode* node){ if
阅读全文
摘要:二叉树——112. 路径总和 题目: 思路: 就是递归,就是减然后看最后能不能减为0。还是包含着一点回溯的东西在,但是在代码中体现的不是很完全。 代码: class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if (r
阅读全文
摘要:二叉树——101. 对称二叉树 题目: 思路: 此题就是考的细,原理上不难,还是递归,那么遍历顺序是啥,答案就是后序遍历,有人结合代码看可能不理解,觉得这明明是前序遍历啊,先判断节点,再对左右节点进行递归。这是一个误导,还有就是这次写的代码可读性比较差,那么为啥是后序遍历呢,因为他是先递归然后再判断
阅读全文

浙公网安备 33010602011771号