![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
McGregorWwww
这个作者很懒,什么都没留下…
展开
-
【LeetCode】102. Binary Tree Level Order Traversal(二叉树的层级遍历 完整代码)
题目如下:这道题是求二叉树的层次遍历,也即宽度优先遍历,并将结果以二维数组形式输出。因为树的每一层节点数可能不同,所以采用二维不定长的vector向量储存采用递归方式求解,找完一层找下一层输入在下面的程序前需要处理一下,采用先序建树,遇到叶子节点时将左右孩子置零,例如题目中的树,输入时输入:3 9 0 0 20 15 0 0 7 0 0完整代码如下: #incl...原创 2018-12-06 19:12:52 · 237 阅读 · 0 评论 -
【LeetCode】931. Minimum Falling Path Sum 动态规划、取容器最值
一到简单的DP,一遍AC当前行状态受上一行的状态约束,很容易写出状态转移方程dp[i][j]=min(min(dp[i-1][j-1], dp[i-1][j+1]), dp[i-1][j])+A[i][j];需要处理的是首尾两列,完整代码如下:class Solution {public: int minFallingPathSum(vector<vect...原创 2019-03-11 21:40:37 · 166 阅读 · 0 评论 -
【LeetCode】413. Arithmetic Slices
以dp[i] 表示以A[i]结尾的arithmetic slices 个数,可列出状态转移方程:dp[i] = dp[i-1] - 1不满足条件的地方dp[i] = 0 ,最后将dp数组加和代码如下:class Solution {public: int numberOfArithmeticSlices(vector<int>& A) {...原创 2019-03-19 22:53:34 · 154 阅读 · 0 评论 -
【LeetCode】647. Palindromic Substrings 动态规划
对于这道DP题,自己并没有找到合适的状态划分 ,于是在讨论区寻找题解对于一个 i 到 j(i<j) 的字符串,它是回文串,当且仅当 i 与 j 处值相等并且 i+1 到 j-1 的子串也满足条件,于是,状态转移方程为dp[i][j] = s[i] == s[j] && (j - i < 3 || dp[i + 1][j - 1]);代码如下:...原创 2019-03-14 19:01:03 · 226 阅读 · 0 评论 -
【LeetCode】983. Minimum Cost For Tickets
代码如下:class Solution {public: int mincostTickets(vector<int>& days, vector<int>& costs) { int dp[366]; int flag[366]={0}; dp[0] = 0; ...原创 2019-03-09 17:02:25 · 169 阅读 · 0 评论 -
【LeetCode】338. Counting Bits 位运算DP
给定一数字,分别统计从零到该数字之间所有数字二进制中 1 的个数从hint中可以看出此题可用DP解,进一步观察可发现只要是2的幂,1的个数均为1,而两个相邻幂之间的数字与前一个幂数有关判断一个数是否为2的幂可用位运算:if((n & (n-1)) == 0) //该数是2的幂代码如下:class Solution {public: vecto...原创 2019-03-06 19:25:21 · 123 阅读 · 0 评论 -
【LeetCode】198. House Robber动态规划
假设有n个房子,走到n+1位置时的前一个状态可能是第n个房子或第n-1个房子,但中间可能会有两所连续的房子不被抢,例如:Input:[2, 1, 1, 2]抢劫房子1和房子4:2 + 2 = 4故而,每一个状态i只能由第i-2或第i-3个状态得到(若由第i-4个状态得到,加上第i-2个一定会更大)前面的状态只需预处理一下就好了代码如下:class Solu...原创 2019-03-05 20:20:04 · 133 阅读 · 0 评论 -
【LeetCode】53. Maximum Subarray 动态规划、最大子段和
题为求数列的最大子串和,分析后采用动态规划策略最初的想法是用 f[i] 表示 0 到 i 区间的最大子串和,但这样并不能很好的用当前状态表示下一状态,因为最优的子串可能与下一个数字不连续进而想到以 f[i] 表示 0 到 i 区间且以nums[i]结尾的最大子串的和,这样固定了尾部的元素,使子问题灵活性降低,方便求解class Solution {public: int...原创 2019-03-04 21:50:05 · 312 阅读 · 0 评论 -
【LeetCode】743. Network Delay Time 图最短路问题
题目是一道求图的最短路问题,此类问题主要有三种经典算法:① Floyd② Bellman Ford③ Dijkstra 代码如下://Floydint networkDelayTime(vector<vector<int>>& times, int N, int K) { /* Initialization begin*/ ...原创 2019-01-22 21:27:53 · 360 阅读 · 0 评论 -
【LeetCode】951. Flip Equivalent Binary Trees
题目大意:给定两棵树,判断经过一系列旋转操作后是否相等。刚开始写就想设一个旋转操作,遇到不等的节点就旋转再判断,代码又臭又长。看了一下讨论区,恍然大悟,原来并不需要真正的旋转,将遍历的顺序改变一下其实就相当于做了旋转: /** * Definition for a binary tree node. * struct TreeNode { * int val; ...原创 2019-01-22 10:41:24 · 225 阅读 · 0 评论 -
【LeetCode】872. Leaf-Similar Trees
很简单的一道题,题目本身没什么好说的, 只是在提交的时候发现一个问题,判断两个vector相等的两种方法速度不一样方法一:class Solution {public: vector<int> lvs1; vector<int> lvs2; void dfs(TreeNode* root, vector<int> &...原创 2019-01-21 15:36:46 · 158 阅读 · 0 评论 -
【LeetCode】589 & 590 N-ary Tree Preorder(Postorder) Traversal
这两道题没什么特别之处但是从题解中学到了,遍历vector的新方法/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val, vector<Node*> _chil...原创 2019-01-21 10:13:09 · 157 阅读 · 0 评论 -
【LeetCode】117. Populating Next Right Pointers in Each Node II
题目描述:方法一:首先想到层级遍历,既然是层级遍历,心想没准之前102的函数可以拿来用于【斜眼笑】,于是写了这么个不伦不类的算法:/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *ne...原创 2019-01-20 14:28:56 · 126 阅读 · 0 评论 -
【LeetCode】746. Min Cost Climbing Stairs 动态规划
一道简单的DP题思路就是看当前状态受前面的哪些状态影响,在本题中,一次可以走1或2步,所以DP方程为:dp[i] = cost[i] + min(dp[i-2], dp[i-1]); 还有一个需要注意的地方就是return的时候返回min(dp[n-1], dp[n-2])代码如下:class Solution {public: int minCostClim...原创 2019-01-24 11:07:25 · 109 阅读 · 0 评论 -
【LeetCode】101. Symmetric Tree
题目描述:最开始的想法是中序遍历存到vector里,然后前后同时扫面判断vector是否对称。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode...原创 2019-01-18 17:30:18 · 97 阅读 · 0 评论 -
【LeetCode】814. Binary Tree Pruning
一道树的剪枝,起初的想法是设一个函数,判断当前节点的子树是否含1,后来发现,后序遍历删除值为0的叶子节点就可以了。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * ...原创 2019-01-18 13:07:43 · 110 阅读 · 0 评论 -
【LeetCode】107. Binary Tree Level Order Traversal II
题目是102的变形,这里的处理就是改变了一下输出形式 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), lef...原创 2019-01-17 20:07:41 · 100 阅读 · 0 评论 -
【LeetCode】712. Minimum ASCII Delete Sum for Two Strings 最长公共子序列
基于最长公共子序列(不连续)问题,若当前相等,dp[i][j] = dp[i-1][j-1]+s1[i]+s2[j]否则,dp[i][j] = max(dp[i-1][j], dp[i][j-1])考虑边界,加一圈0以sea eat为例: 0 1 2 3 0 0 0 0 0 1 0 0 e e ...原创 2019-03-24 21:50:20 · 103 阅读 · 0 评论