
LeetCode
文章平均质量分 62
LeetCode练题心得,比较精简
NUC_Dodamce
醉生梦死谁成器,拓马长枪定乾坤。
展开
-
LeetCode刷题测试辅助(更好的二叉树打印)
这个题的要求就是打印一个二叉树,我们在此基础上进行修改,日后的二叉树问题,debug时就可以直接使用了,下面附上我的代码。原创 2023-05-29 12:37:34 · 235 阅读 · 0 评论 -
JavaSE_Java/C++模拟实现二叉树、C++/Java四种二叉树遍历题型(递归、非递归、Morris)遍历
Java构造二叉树的方式采用传递数组的形式。利用2*根节点下标+1=左子节点下标,2 *根节点下标+2=右子节点下标的方式构建2.C++模拟实现二叉树(层序构建二叉树)C++创建二叉树时采用层序遍历的方法。使用队列辅助创建,同样需要传入数组.这里在构造函数中抛出异常可能会导致内存泄漏。本应该用智能指针的,搞了半天没搞出来。此外:这里添加了一个父亲节点和标记位来辅助删除多创建的节点。其他的逻辑和上面的Java版本类似,不在赘述Java:C++:2)非递归版本Java:C++:3)Morr原创 2022-06-11 11:10:17 · 243 阅读 · 0 评论 -
JavaSE_Queue/Stack模拟实现,C++/Java实现环形队列
Stack底层是一个数组Queue底层是一个链表环形队列环形队列首尾指针移动规则:front=(front+1)%array.length 来达到将数组抽象为环形的方法判断空和满有三种策略注意:方法2,3 获取环形队列尾部的方法时 last指向的是环形队列尾部的下一个位置。所以需要公式 (last+array.length-1)%array.length来计算last指向的上一个节点...原创 2022-06-10 13:03:47 · 158 阅读 · 0 评论 -
LeetCode 贴纸拼词 C++ dfs+dp+剪枝 -注解
原题链接class Solution {private: int dfs(unordered_map<string,int>&dp,vector<vector<int>>&dict,string&target){ int ret=INT_MAX; if(dp.count(target)){ return dp[target]; } vector&l.原创 2022-05-16 10:42:35 · 152 阅读 · 0 评论 -
LeetCode_C++线性动态规划(线性dp)_单串LIS(最长递增子序列,最长递增子序列的个数)
文章目录1.线性动态规划2.例题练习最长递增子序列最长递增子序列的个数1.线性动态规划线性动态规划的特点是:状态推导按照i从小到大进行推导。大规模的解答依靠小规模的解答。解决动态规划问题大体上分为:问题的Base Case情况(最简单的情况)问题的状态有哪些什么选择问题的状态可能会改变如何定义dp数组表达状态和选择(状态转移)线性动态规划状态定义一般为:dp[n]:0~n符合题干的答案状态转移一般有两种情况:1. 依赖比 i 小的 O(1) 个子问题dp[n] = f(dp[原创 2022-04-28 17:36:43 · 1149 阅读 · 0 评论 -
LeetCode_C++每日一题(数学公式推导)_旋转函数
文章目录暴力求解:根据每次求和的数学关系式,找到数学表达式暴力求解:先进行数组的旋转,在进行求和。在所有旋转中找到求和最大的值进行返回,但这样会超时。class Solution {private: void SwapArr(vector<int>&nums,int i){ //根据i来旋转 vector<int>tmp(nums.begin(),nums.begin()+nums.size()-i);//获取前半段数组原创 2022-04-22 10:37:05 · 806 阅读 · 0 评论 -
LeetCode_C++滑动窗口算法_无重复字符的最长子串
文章目录1.思路2.C++代码1.思路滑动窗口算法:维护一个窗口,不断滑动更新答案。定义左右窗口边界left和right这个区间为[left,right)。右移right,直到符合题目要求。停止移动right,判断是否需要移动left,以及如何移动。重复2,3步,直到right字符串结尾。应用到这道题上:定义左右窗口边界left和right这个区间为[left,right)。移动right一步,讲移动的字符添加到字符和出现总次数的哈希映射中方便之后查重。如果右移的这个字符在之前的原创 2022-04-21 22:52:14 · 907 阅读 · 0 评论 -
LeetCode动态规划(C++、重叠子问题、dp数组、最优子结构、状态转移方程、状态压缩-斐波那契数列-LeetCode零钱兑换)
文章目录1.动态规划框架2.框架应用①斐波那契数列最基础解法重叠子问题dp数组斐波那契数列状态方程状态压缩②LeetCode零钱兑换最优子结构思路状态转移方程C++dp数组解法1.动态规划框架动态规划问题根据以下3点入手问题的Base Case情况(最简单的情况)问题的状态有哪些什么选择问题的状态可能会改变如何定义dp数组表达状态和选择综上,解决动态规划的关键是状态,选择,dp数组dp[..][..]=Base Case;//初始化dp数组//状态转移for(状态1 in 状态1所有原创 2022-01-14 22:53:31 · 380 阅读 · 0 评论 -
LeetCode_C++滑动窗口算法——最小覆盖子串
文章目录1.最小覆盖子串思路C++实现1.最小覆盖子串思路对于字符串s来讲,初始化左右指针left,right=0左右指针区间为[left,right),这个区间称为一个窗口不断增加right,使窗口增大,直到窗口的字符串包含了T字符串的所有字符停止增加right,增加left,减小窗口,直到窗口的字符串不符合要求重复执行3,4步停止循环的条件为right到大字符串s的末尾(为了找到最小值)初始化两个哈希表window,need记录窗口的字符以及所需要凑齐的字符,再定义变量valid原创 2022-02-08 02:57:13 · 338 阅读 · 0 评论 -
C++_电话号码的字母组合写题思路+详细递归分析(LeetCode)
原题链接文章目录题目大意递归思路1.递归结束的条件2.如何获取数字对应的字符串3.递归子函数所需要的变量4.主函数代码5.递归函数代码递归分析题目大意数字2到9都对应这字符串,输入一串数字字符串,输出它能表示的字母组合,可以按任意顺序返回(但注意数字0和1没有对应的字符串)eg:输入“23”'2’对应的字符串为"abc"'3’对应的字符串为"def"所有的结合方式为:“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”题目所给函数class Sol原创 2021-08-25 17:39:19 · 534 阅读 · 11 评论