Leetcode未完善
有些问题暂时解决不了,空着先
梅杏柿
这个作者很懒,什么都没留下…
展开
-
Leetcode第312题 戳气球C++解法
事实证明,我还是不会做……没有任何逻辑推导,这是硬做啊class Solution {public: int maxCoins(vector<int>& nums) { int n=nums.size(),res=0; if(n==1) return nums[0]; if(n==2) return nums[0]*nums[1]+(nums[0]>nums[1]?nums[原创 2021-02-21 10:06:03 · 168 阅读 · 0 评论 -
Leetcode第222题 完全二叉树的节点个数 C++解法
前序遍历。但是这道题是要在O(N)以下,所以这种传统方法肯定是不行的class Solution {public: int countNodes(TreeNode* root) { if(!root) return 0; return 1+countNodes(root->left)+countNodes(root->right); }};...原创 2021-02-04 18:45:36 · 60 阅读 · 0 评论 -
Leetcode第297题 二叉树的序列化与反序列化 C++ DFS解法
DFS谁用谁说好!这用DFS也太方便了,直接套前序遍历就可以了!当然字符流也功不可没,因为分割字符串也变得简单!序列化居然只需要三行代码!反序列化的时候,有个问题,我没有解决,就是当字符流ss用完之后呢?这时候会怎么样?不明白…… // Encodes a tree to a single string. string serialize(TreeNode* root) { if(!root) return "null "; return t原创 2021-02-04 17:58:40 · 106 阅读 · 0 评论 -
Leetcode第106题 从中序与后序遍历序列构造二叉树 C++解法
有了前序和中序的经验,后序的好写很多,直接反过来,从右结点开始构建即可class Solution {public: TreeNode *build(vector<int>& postorder,int& pmove,int inl,int inr,unordered_map<int,int>& rec) { if(inr<=inl) return nullptr; TreeNode原创 2021-02-03 16:10:36 · 149 阅读 · 0 评论 -
Leetcode第105题 从前序与中序遍历序列构造二叉树
真的是蠢死了,用前序去分割,能不错吗?白忙活了一上午?class Solution {public: TreeNode *build(vector<int> &preorder,vector<int> &inorder,int prel,int prer,int inl,int inr){ if((inr<inl)||(prer<prel)) return nullptr; int rval=原创 2021-02-03 10:34:04 · 74 阅读 · 0 评论 -
Leetcode第654题 最大二叉树 C++解法
先上迭代解法,关键是要分类清楚class Solution {public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { TreeNode *root=new TreeNode(nums[0]); //首先要建立一个根节点 for(int i=1;i<nums.size();i++) { TreeNode *no原创 2021-02-02 18:37:04 · 166 阅读 · 0 评论 -
Leetcode第114题 二叉树展开为链表 C++解法
先上笨蛋解法,提价的时候,我发现一个问题,这道题的检验是检验原来的root地址,如果你后面把root地址改了,那他检验的还是原二叉树。class Solution {public: void rconnect(TreeNode *&node,TreeNode *pmove) { if(pmove==nullptr) return; node->right=new TreeNode(pmove->val);原创 2021-02-02 17:07:21 · 128 阅读 · 0 评论 -
Leetcode第226题 翻转二叉树C++解法
开刷二叉树,都先从递归解。提交了好几次先看第一遍正确解法。class Solution {public: void reverselr(TreeNode* &lnode,TreeNode* &rnode) { if(lnode==nullptr&&rnode==nullptr) return; if(lnode==nullptr) { lnode=rnode;原创 2021-02-01 20:29:02 · 116 阅读 · 0 评论 -
Leetcode第25题 K 个一组翻转链表C++解法
先用的迭代实现,用了很多引用传参。估计有很多需要优化的后面再说。递归的实现方法也后面再说。class Solution{public: ListNode *reverselist(ListNode *&head, int &k, int &i) { ListNode *result = head,*pmove=head; head=head->next; pmove->next=nullptr; whi原创 2021-02-01 19:18:38 · 78 阅读 · 0 评论 -
Leetcode动态规划hard题收录
编辑距离鸡蛋掉落原创 2021-01-19 14:09:28 · 190 阅读 · 0 评论 -
Leetcode第651题 4键键盘 C++解法
我承认自己有取巧的成分,这个不能算是最佳思路,我归纳了前10个,分析出来1、小于6的情况下,dp[i]=i;2、在超出6的情况下,dp[i]只有两种最大可能,要么是经过C-A,C-C,C-V,C-V,C-V要么是经过了C-A,C-C,C-class Solution{public: int fourkeys_keyboard(int n) { vector<int> dp(n + 1, 0); for (int i = 1; i <原创 2021-01-19 13:50:26 · 285 阅读 · 0 评论 -
Leetcode第354. 俄罗斯套娃信封问题
在做了第300题 最长递增子序列C++解法之后,得到思路,但毫无疑问,还是暴力解法。class Solution {public: int maxEnvelopes(vector<vector<int> >& envelopes) { if(envelopes.empty()) return 0; sort(envelopes.begin(),envelopes.end(),[](const vector<in原创 2021-01-18 09:57:32 · 98 阅读 · 0 评论 -
Leetcode第300题 最长递增子序列C++解法
真是个辣鸡,暴力动态规划写了半天才通过。class Solution {public: int lengthOfLIS(vector<int>& nums) { if(nums.empty()) return 0; int n=nums.size(),res=1; vector dp(n,1); for(int i=1;i<n;++i) { for(i原创 2021-01-17 22:41:01 · 195 阅读 · 0 评论 -
Leetcode第518题 零钱兑换 II C++解法
看这道题,一开始想着用有点类似斐波那契数列数组去做,f[n]=sum(f[n-cion[i]])。但是列了一下发现不行,有重合情况。这是想着用一行数组去解决,自然不行,所以还是对动态规划不清楚,最原始的是要列mXn行。dp[i][j]=dp[i-1][j]+dp[i][j-coins[i-1]]。这里的道理自己也说的不清楚。首先第一项肯定是不选第i个硬币的情况的,等于dp[i-1][j]这没什么问题,接下来是dp[i][j-coins[i-1]]。这一项是什么呢?是在使用第i个硬币的情况,但为什么是在第原创 2021-01-16 17:38:15 · 118 阅读 · 0 评论 -
Leetcode第712题 两个字符串的最小ASCII删除和C++解法
昨晚上走之前脑子里混乱就是想不透,回去列了下,是想明白了。主要在于初始化dp[0][i]和dp[j][0]。然而大早上来还是总是报错,而且是错了一次,找的时候还没意识到第二次是相同的错误,就是字符串序号比dp序号少1.class Solution{public: int minimumDeleteSum(string s1, string s2) { int m = s1.size(), n = s2.size(); int dp[m + 1][n +原创 2021-01-14 08:16:02 · 99 阅读 · 0 评论 -
Leetcode第53题 最大子序和C++解法
之前动态规划不是很清楚,所以看了答案做了,不清楚,恶补了下DP后再来重新做;class Solution{public: int maxSubArray(vector<int> &nums) { int res=INT_MIN,add=0; for(int num : nums) { if(add+num>num) add+=num;原创 2021-01-13 17:07:32 · 69 阅读 · 1 评论 -
Leetcode第713题 乘积小于K的子数组
先上暴力解法。class Solution {public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { int cal,count=0; for(int i=0;i<nums.size();i++) { cal=1; for(int j=i;j<nums.size();j++) {原创 2021-01-12 14:18:11 · 96 阅读 · 0 评论 -
Leetcode第78题 子集
笨方法去解,中间设置了好多无关变量,不然vector在尾插的时候会报错class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { set<int> s; for(int i=0;i<nums.size();i++) s.insert(nums[i]); vector<vec原创 2021-01-12 12:43:08 · 70 阅读 · 0 评论 -
Leetcode第152题乘积最大子数组
果不其然,错都跟标准错法一样,目前来说动态规划还是很吃力。就写出这个错法就废了不少劲。class Solution{public: int maxProduct(vector<int> &nums) { int result = nums[0]; int length = nums.size(); vector<int> s(length, 1); s.resize(leng原创 2021-01-12 10:42:23 · 76 阅读 · 0 评论 -
Leetcode第697题数组的度 C++解法
待解决原创 2021-01-11 09:48:29 · 77 阅读 · 0 评论 -
Leetcode第104题 二叉树的最大深度
写了几道递归题,果然写递归快了很多。class Solution {public: int maxDepth(TreeNode* root) { if(!root) return 0; int pl=1,pr=1; if(!root->left&&!root->right) return pl; pl+=maxDepth(root->left);原创 2021-01-06 14:10:33 · 70 阅读 · 0 评论 -
Leetcode第20题 有效的括号 解法
这道题思路很简单,但是要把代码写的简练要看个人熟悉程度。先看我第一次通过的:#include <iostream>#include <string>#include <stack>using namespace std;class Solution{public: bool isValid(string s) { stack<char> trans; int s_size = s.size();原创 2021-01-02 15:02:36 · 88 阅读 · 0 评论 -
Leetcode第69题 x 的平方根 C++(未完善)
令人头疼的二分法,还是无法信手拈来看看我第一次的错误示范class Solution {public: int mySqrt(int x) { int low=0,high=x,medium; int temp,result; while(low<=high) { medium=(low+high)/2; temp=medium*medium; if(t原创 2021-01-05 09:59:35 · 88 阅读 · 0 评论 -
Leetcode第28题 实现 strStr() C++(未解决,还不能熟练写出KMP)
暴力解法class Solution {public: int strStr(string haystack, string needle) { if(!needle.size()) return 0; if(needle.size()>haystack.size()) return -1; int i=0; for(;i<haystack.size()-needle.size()+1;i原创 2021-01-05 08:18:43 · 49 阅读 · 0 评论