自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 LeetCode113路径总和2递归 二叉树

问题描述代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<in

2020-09-26 17:20:55 93

原创 *leetcode257二叉树的所有路径递归

代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<string> binary.

2020-09-26 16:58:32 77

原创 *LeetCode递归 二叉树404左叶子之和

问题描述代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int sumOfLeftLeaves(

2020-09-26 16:46:27 150

原创 LeetCode 121 买卖股票的最佳时期 动态规划

问题描述思路要遍历所有的情况,并且有重叠子问题,就可以考虑使用动态规划的思想来求解1.首先就是确定dp[i]该表示什么,本题就按照题目意思来,表示第i天以前的最大利润2.状态方程 本题为 dp[i]=max(dp[i−1],prices[i]−minprice),第i天要么什么都不做,要么在第i天卖出股票,所得的利润才可能是最大的3.初始化 dp[0]=0;代码代码class Solution {public: int maxProfit(vector<int&g

2020-09-21 19:02:09 81

原创 动态规划LeetCode309最佳买卖股票时期含冷冻期

问题描述思路读完题目,就知道要求出所有可能的情况,可以使用递归。然后可以发现递归求解过程中会有重叠子问题,所以就采用动态规划的方法。用一个二维数组来保存状态。总共三列,第一列表示持有股票,第二列表示未持有股票且处于冷冻期,第三列表示未持有股票且未处于冷冻期,dp[i]表示这天结束后的最大收益,每个dp[i]只与昨天也就是dp[i-1]有关。不难理解,只要昨天对应的三种状态的收益是最大的,在这个基础上进行相关操作,就能确保今天的收益是最大的代码class Solution {public:

2020-09-21 11:03:13 126

原创 LeetCode 213 打家劫舍 动态规划

问题描述该题就是在打家劫舍1的基础上增加了一个条件,就相当于求两次打家劫舍1,因为要想偷得钱最多,就要分两种情况:在第一个和最后一个中选择哪个(两个都不选的舍去,那肯定不是最大的)偷到的钱是最多的;代码class Solution {public: int f(vector <int> &nums,int s,int e)//相当于打家劫舍1 { vector <int> dp(nums.size()); dp[s]=

2020-09-20 20:46:13 97

原创 动态规划LeetCode 337打家劫舍3

问题描述题解我曾试用递归的方法来做这个题目,超时了;所以就尝试用记忆化搜索来写,其实也就是动态规划,,那怎样保存数据呢?这里就要用到容器 unordered_map,关于其使用方法可以去百度一下,这个东西就是一个无序的映射,就是插入元素不会自动进行排序。具体用法见代码代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tree

2020-09-20 20:38:48 124

原创 七桥问题,判断图中是否存在欧拉回路

#include <iostream>#include <vector>using namespace std;int n;void dfs(int start,vector <vector <int> > &juzhen,vector <int> &vis){ vis[start]=1; for(int j=1;j<=n;j++) { if(vis[j]==0&&ju

2020-09-16 22:52:59 528

原创 P1364 医院设置

问题描述思路本题用floyed算法求出一点到其余个点的最短路径,然后按照题目要求求最小值代码#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int n,x,y,num=0,res=1e9; cin>>n; vector <int> p(n+1); vector <

2020-09-12 21:56:52 990

原创 P5076 【深基16.例7】普通二叉树(简化版)

问题描述思路本题就是multiset(二叉线索平衡树)的应用主要应用两个函数 :lower_bound,upper_bound看完了有关set 和multiset的CSDN,这题就绝对没问题查询 x 数的排名排名,说白了就是排序之后的x的下标。我们只要用lower_bound方法,找到第一个x的位置。然后从begin开始往后遍历容器,只要达到这个位置,就输出当前下标即可。2.查询排名为 x 的数遍历容器,只要当前排名到达x,就输出当前值。(因为multiset容器无法进行随机访问

2020-09-12 19:49:21 387

原创 ccf201809-2买菜

问题描述思路首先注意,每个人的输入数据是已经排好序的,按题目要求进行模拟即可,代码中有详细解释代码#include <iostream>#include <vector>#include <algorithm>using namespace std;struct time{ int s; int e;};int main(){ int n,x,y,end,st; long long int res=0; c

2020-09-11 22:32:48 144

原创 落谷二叉树根据前序遍历和中序遍历,输出后序遍历

问题描述思路如果在纸上来写这个题目,我们呢就会发现会有很多重复的,类似的步骤,这就可以利用递归,个人建议自己在纸上画出解题的过程,递归的条件和过程就会比较清楚代码#include <iostream>#include <string>using namespace std;string a,b;//a代表前序遍历,b代表中序遍历void houxu(int x,int y,int p,int q)//x到y表示前序遍历的范围,p到q表示中序遍历范围{ if

2020-09-11 11:18:03 437

原创 落谷二叉树淘汰赛

问题描述思路题解大佬的思路:将比赛的队伍分为2类,第一类就是前一半的参赛队伍,第二类则是后一半的参赛队伍,,最后的决赛总是在第一类和第二类的最强者中进行,所以只需要在两类中进行排序就行代码#include <iostream>#include <algorithm>#include <vector>#include <stdio.h>using namespace std;struct dui{ int num; int

2020-09-11 11:06:57 228

原创 栈 LeetCode20有效符号

问题描述解题思路栈顶元素反映了在嵌套层次关系中,最近的需要匹配的元素这里可以利用栈代码class Solution {public: bool isValid(string s) { stack <char> a; for(int i=0;i<s.size();i++) { if(s[i]=='(' ||s[i]=='[' || s[i]=='{') a.push(s[i]); else

2020-09-07 18:48:29 102

原创 *递归二叉树LeetCode左叶子之和

问题描述注意事项递归条件必须注意问题是求所有左叶子之和代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:

2020-09-07 17:24:38 401

原创 递归二叉树LeetCode112路径总和

问题描述注意事项看清楚题目的意思,,是否存在根节点到叶子结点的路径,所以递归的循环终止条件是if(rootNULL) return false;if(root->valsum&&root->leftNULL&&root->rightNULL) return true;/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN

2020-09-07 16:48:39 97

原创 二叉树递归 leetcode110平衡二叉树

问题描述代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int len(TreeNode *a)

2020-09-07 16:37:22 66

原创 递归二叉树leetcode 完全二叉树的节点个数

问题描述代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int countNodes(TreeNod

2020-09-07 16:15:56 107

原创 递归二叉树LeetCode 101.对称二叉树

问题描述代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { bool check(TreeNode *a,TreeNod

2020-09-07 16:09:15 116

原创 递归二叉树 LeetCode 100相同的树

问题描述/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)

2020-09-07 15:40:15 63

原创 递归二叉树leetcode226翻转二叉树

问题描述看到二叉树就用递归准没错代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { TreeNode *t;publ

2020-09-07 15:33:47 76

原创 二叉树递归LeetCode111二叉树的最小深度

问题描述代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int minDepth(TreeNode*

2020-09-07 14:46:36 85

原创 递归与回溯 LeetCode 40组合总和2

问题描述思路与39题类似的思想 ,不过要注意去掉重复结果代码class Solution { vector <vector <int> > res; vector <int> p; int sum(vector <int> a) { int s=0; for(int i=0;i<a.size();i++) { s+=a[i]; }

2020-09-06 20:44:06 70

原创 递归与回溯LeetCode39 组合总和

问题描述思路看题目,明白要枚举所有可能的情况,,就可以使用递归最最重要的一点就是画出树状图,根据树状图敲代码就像依葫芦画瓢代码class Solution { vector <vector <int> > res;//存放总结果的数组 vector <int> p;//存放临时结果的数组 int sum(vector <int> a)//求和函数,求数组a中的所有元素之和 { int s=0;

2020-09-06 19:44:38 103

原创 递归与回溯 LeetCode 77.组合

问题描述思路老方法,,看见枚举就用递归代码class Solution {private: vector <vector <int>> res; void dfs(int n,int k,int start,vector <int> &p) { if(p.size()==k) {//套路1,先写什么时候将结果放入res res.push_back(p); }

2020-09-06 11:32:24 133

原创 递归与回溯 leetcode93复原Ip地址

问题描述看到枚举,直接想到递归,,看到求字符串子串就用动态规划代码class Solution {public: vector<string> restoreIpAddresses(string s) { vector<string> res;//res保存结果 restore(s, 0, "", res); return res; } void restore(string s, int k, str

2020-09-05 21:30:06 183

原创 递归与回溯LeetCode 46全排列

问题描述思路又是枚举问题,可以采用递归回溯的办法,关键是画出树状图代码class Solution {private: vector <bool> judge;//用来判断是否访问过 vector <vector <int> > res; //将结果储存在res中 void f(vector<int>& nums,int index,vector<int> p) { if(ind

2020-09-05 18:34:49 129

原创 递归与回溯 LeetCode17电话号码的字母组合

问题描述思路这题一看就知道要求枚举所有的情况,,,可以使用递归代码class Solution {private: map <char ,string> lettermap={//使用映射 {'2',"abc"}, {'2',"abc"}, {'3',"def"}, {'4',"ghi"}, {'5',"jkl"}, {'6',"mno"}, {'7',"pqrs

2020-09-05 10:15:41 74

原创 动态规划Leetcode63不同路径2

题目代码class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m=obstacleGrid.size(),n=obstacleGrid[0].size(); vector <vector<int>> dp(m+1,vector <int> (n,0));

2020-09-04 20:59:37 95

原创 动态规划leetcode62不同路径

问题描述代码class Solution {public: int uniquePaths(int m, int n) { if(m==0||n==0) return 0; vector <vector <int>> dp(m,vector <int> (n,1)); for(int i=m-2;i>=0;i--) { for(int j=n-2;j>=0;j--) {

2020-09-04 20:06:34 61

原创 动态规划LeetCode91.解码方法

问题描述代码class Solution {public: int numDecodings(string s) { int n=s.size(); vector <int> dp(s.size()+1,1); if(s[0]=='0') return 0; for(int i=2;i<=n;i++) { if(s[i-1]=='0') { if(s[i-2]=='1'||s[i-2]=='2'){

2020-09-04 19:56:20 118

原创 动态规划leetcode279完全平方数

题目描述思路一般求最值问题,或者是有重复步骤的问题,都可以用动态规划来解函数表达式求***f(i)=min(f(i-1),f(i-4),f(i-9)…………)+1***在不越界的情况下代码class Solution {public: int numSquares(int n) { vector<int> dp(n+1,INT_MAX); dp[0]=0;//为什么初始化为0,下文有讲 dp[1]=1; for

2020-09-04 19:20:37 137

原创 动态规划leetcode 343整数拆分

问题描述思路注意事项此题的有一个坑,,,首先明白函数的定义是:将i分割,获得的最大乘积但是我们在计算的时候需要考虑不分割的情况,即直接用j*(i-j)代码class Solution {private: int max3(int a,int b,int c) { return max(a,max(b,c)); }public: int integerBreak(int n) { vector <int> d

2020-09-04 16:11:07 119

原创 动态规划leetcode 64最小路径和

与leetcode 120 三角形最短路径和类似class Solution {public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector <vector <int>> dp(m,vector <int> (n,0)); dp.

2020-09-04 15:37:26 158

原创 动态规划leetcode 120三角形最小路径和

思路动态规划问题就是找函数表达式,本题的函数表达式就是f[i][j]代表第i行第j列的数字到三角形低端的最短距离f[i][j]=min(f[i+1][j],f[i+1][j+1])+triangle[i][j];代码class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n=triangle.size(); if(n==0).

2020-09-04 15:04:00 106

原创 落谷3循环结构高精度阶乘和

高精度阶乘和问题描述思路首先明确本体的循环结构,也就是一需要一重循环,每次求完阶乘之后把结果加入到要输出的res数组里面即可,由于是高精度,所以可以构造两个函数分别求乘法和加法,,求n阶乘问题可以简化为n-1的阶乘在乘以n,所以每次乘法的结果都保存在一个数组中,下次利用此数组乘n即可求出n的阶乘,加法的结构保留在res中,每次求完阶乘就实行加法操作代码#include #include #include using namespace std;vector chengfa(vector

2020-09-03 22:03:57 178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除