LeetCode
LeetCode题解
庾信平生最萧瑟
坎坷之路 终抵星空
展开
-
LeetCode 797. 所有可能的路径
原题目:https://leetcode-cn.com/problems/all-paths-from-source-to-target/思路:使用BFS + 回溯算法代码:class Solution { vector<vector<int>> ans; vector<int> tmp; void bfs(vector<vector<int>>& graph,int index){ ..原创 2020-11-05 23:18:56 · 430 阅读 · 0 评论 -
LeetCode 1365. 有多少小于当前数字的数字
原题目:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/思路:采用计数排序的方法代码:class Solution {public: vector<int> smallerNumbersThanCurrent(vector<int>& nums) { vector<int> cnt(10..原创 2020-10-26 18:30:07 · 285 阅读 · 0 评论 -
LeetCode 977. 有序数组的平方
原题目:https://leetcode-cn.com/problems/squares-of-a-sorted-array/思路:使用双指针,从后向前加元素。代码:class Solution {public: vector<int> sortedSquares(vector<int>& A) { int i=0,j=A.size()-1,index = A.size()-1; vector<in..原创 2020-10-16 16:47:48 · 317 阅读 · 0 评论 -
LeetCode 116. 填充每个节点的下一个右侧节点指针
原题目:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/思路:采用BFS,使用size记录该层的个数,然后修改next指针就可以了代码class Solution {public: Node* connect(Node* root) { if(root == nullptr) return root; queue<Node*&..原创 2020-10-16 16:01:52 · 104 阅读 · 0 评论 -
LeetCode 1002. 查找常用字符
原题目:https://leetcode-cn.com/problems/find-common-characters/思路:使用哈希表,每次遍历完一个字符串后,取最小的次数代码:class Solution {public: vector<string> commonChars(vector<string>& A) { vector<int> m(26,INT_MAX); vector<..原创 2020-10-14 11:32:16 · 133 阅读 · 0 评论 -
LeetCode 530. 二叉搜索树的最小绝对差
原题目:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/思路:中序遍历,求解相邻接点的差值绝对值的最小值代码:class Solution { bool flag; int ans,pre; void dfs(TreeNode* root){ if(root == nullptr) return; dfs(root->left)..原创 2020-10-12 17:19:46 · 161 阅读 · 0 评论 -
LeetCode 75. 颜色分类
原题目:https://leetcode-cn.com/problems/sort-colors/思路:使用双指针,l记录当前左边到的位置,r记录右边到的位置为0,移动到前面。l++,cur++;为2移动到后面。r--。(此时不可以cur++,因为nums[r]使我们没有碰到过得元素)1时进行下一个元素的判断。cur++代码:class Solution {public: void sortColors(vector<int>& num..原创 2020-10-07 22:15:00 · 96 阅读 · 0 评论 -
LeetCode 834. 树中距离之和
原题目:https://leetcode-cn.com/problems/sum-of-distances-in-tree/思路:采用树形动态规划的思想。对于每一个节点来说,所有节点到他的距离之和的状态转移方程为:其中dp[v]代表以v为根的所有节点到他的距离,sz[v]表示已v为根的子树节点的数量。当一次遍历完,得到了所有节点的dp时,我们不需要以另一个节点为根重新遍历,只需要对树结构进行变化(官方解答的视频),所以每一次做变化我们只需要变换dp[u],sz[u],dp[v],s.原创 2020-10-06 23:13:05 · 223 阅读 · 0 评论 -
LeetCode 771. 宝石与石头
原题目:https://leetcode-cn.com/problems/jewels-and-stones/思路:构造哈希表代码:class Solution {public: int numJewelsInStones(string J, string S) { map<char,int> h; for(char& c:J) h[c] = 1; int sum = 0; for(c..原创 2020-10-02 15:28:31 · 117 阅读 · 0 评论 -
LeetCode 896. 单调数列
原题目:https://leetcode-cn.com/problems/monotonic-array/思路:使用两个flag(a和b)来表明里面存在增和减的情况,如果两者同时出现,那么就不单调代码:class Solution {public: bool isMonotonic(vector<int>& A) { if(A.size() < 3) return true; int a=0,b=0; ..原创 2020-09-23 22:43:07 · 118 阅读 · 0 评论 -
LeetCode 617. 合并二叉树
原题目:https://leetcode-cn.com/problems/merge-two-binary-trees/思路:构造新的节点,判断递归的终止条件就可以代码:class Solution {public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if(t1 ==nullptr) return t2; if(t2 == nullptr) return t1; ..原创 2020-09-23 22:18:24 · 93 阅读 · 0 评论 -
LeetCode 968. 监控二叉树
原题目:https://leetcode-cn.com/problems/binary-tree-cameras/思路:节点分为三种状态,1:该节点安装了监视器 2:该节点可观,但没有安装监视器 3:该节点不可观代码:class Solution { int ans = 0; int dfs(TreeNode* root){ if(root == NULL) return 1; int left = dfs(root->l...原创 2020-09-22 19:13:33 · 154 阅读 · 0 评论 -
LeetCode 1313. 解压缩编码列表
原题目:https://leetcode-cn.com/problems/decompress-run-length-encoded-list/代码:class Solution {public: vector<int> decompressRLElist(vector<int>& nums) { vector<int> ans; for(int i=1;i<nums.size();i+=2){ .原创 2020-09-20 17:07:07 · 121 阅读 · 0 评论 -
LeetCode 404. 左叶子之和
原题目:https://leetcode-cn.com/problems/sum-of-left-leaves/思路:递归的思想,只计算左叶子的节点值,那么怎么判断是不是左叶子呢,即当前节点指向的做孩子不为空,且做孩子是叶子节点,他就是左叶子代码:class Solution {public: int sumOfLeftLeaves(TreeNode* root) { if(root==nullptr) return 0; return..原创 2020-09-19 21:30:03 · 76 阅读 · 0 评论 -
LeetCode 47. 全排列 II
原题目:https://leetcode-cn.com/problems/permutations-ii/思路:对于全排列的扩展,只需要加上防重的判定条件代码:class Solution { vector<int> vis;public: void backtrack(vector<int>& nums, vector<vector<int>>& ans, int idx, vector<..原创 2020-09-18 22:38:58 · 225 阅读 · 0 评论 -
LeetCode 226. 翻转二叉树
原题目:https://leetcode-cn.com/problems/invert-binary-tree/思路:深度优先遍历,对每一个节点进行左右子树的翻转进行深度优先遍历的时候,可以尝试不构造新的递归函数,这样比较省时间。代码:class Solution {public: void dfs(TreeNode* root){ if(root==NULL) return ; TreeNode* t = root->lef..原创 2020-09-16 08:58:06 · 106 阅读 · 0 评论 -
LeetCode 637. 二叉树的层平均值
原题目:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/思路:程序遍历,依次存入平均值即可代码:class Solution {public: vector<double> averageOfLevels(TreeNode* root) { if(root==NULL) return {}; vector<double> ans;..原创 2020-09-12 20:11:16 · 94 阅读 · 0 评论 -
LeetCode 1267. 统计参与通信的服务器
原题目:https://leetcode-cn.com/problems/count-servers-that-communicate/思路:记录每行每列的计算机的个数,然后依次遍历节点,如果该节点为计算机并且该行或该列的计算机个数大于1,则表示可以通信代码L:class Solution {public: int countServers(vector<vector<int>>& grid) { int m =grid..原创 2020-09-07 13:21:39 · 168 阅读 · 0 评论 -
LeetCode 1382. 将二叉搜索树变平衡
原题目:https://leetcode-cn.com/problems/balance-a-binary-search-tree/思路:获取中序遍历的结果,然后找去中点,此为根节点,依次递归的构造左子树和右子树代码:class Solution {public: vector<int> inorderSeq; void getInorder(TreeNode* o) { if (o->left) getInorder(o-..原创 2020-09-06 12:24:29 · 205 阅读 · 0 评论 -
LeetCode 1004. 最大连续1的个数 III
原题目:https://leetcode-cn.com/problems/max-consecutive-ones-iii/思路:滑动窗口代码:class Solution {public: int longestOnes(vector<int>& A, int K) { int maxlen =0; int left=0,right=0; while(right<A.size()){ ..原创 2020-09-06 12:20:02 · 98 阅读 · 0 评论 -
LeetCode 684. 冗余连接
原题目:https://leetcode-cn.com/problems/redundant-connection/思路:并查集,每次检查边的两个顶点是否属于同一个集合,如果是,则返回(形成了环)。如果不是,将这两个顶点并入到一个集合之中,依次检查所有的边。可以同时考虑路径压缩,每次合并的时候都合并到size大的节点。代码:class UnionFind{private: vector<int> parent; vector<int>..原创 2020-09-06 11:26:38 · 107 阅读 · 0 评论 -
LeetCode 1161. 最大层内元素和
原题目:https://leetcode-cn.com/problems/maximum-level-sum-of-a-binary-tree/思路:使用BFS,记录每一层的值之和,返回最大的层即可代码:class Solution {public: int maxLevelSum(TreeNode* root) { int maxlen=INT_MIN,ans,index=1; queue<TreeNode*> q; ..原创 2020-09-04 12:48:53 · 151 阅读 · 0 评论 -
LeetCode 1557. 可以到达所有点的最少点数目
原题目:https://leetcode-cn.com/problems/minimum-number-of-vertices-to-reach-all-nodes/思路:对示例的结果分析,我们只需找到入度为0的节点即可代码:class Solution {public: vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) { ..原创 2020-09-04 11:57:08 · 130 阅读 · 0 评论 -
LeetCode 486. 预测赢家
原题目:https://leetcode-cn.com/problems/predict-the-winner/思路:当长度为偶数时,先手必获胜。采用动态规划,dp[i][j]表示两端是i,j时,两位选手的得分差值,显然dp[i][i] = nums[i],当i>j时,dp[i][j] = 0,状态转移方程:dp[i][j] = max(nums[i] - dp[i+1][j] , nums[j] - dp[i][j-1])代码:class Solution ...原创 2020-09-02 13:22:59 · 105 阅读 · 0 评论 -
LeetCode 491. 递增子序列
原题目:https://leetcode-cn.com/problems/increasing-subsequences/思路:利用DFS,采用剪枝和set去重就可以了。代码:class Solution { set<vector<int>> ans; void dfs(vector<int>& nums, vector<int>& tmp,int index){ if(tmp.si..原创 2020-08-25 14:32:18 · 118 阅读 · 0 评论 -
LeetCode 459. 重复的子字符串
原题目:https://leetcode-cn.com/problems/repeated-substring-pattern/思路:我们将两个s连在一起,并移除第一个和最后一个字符。如果s是该字符串的子串,那么s就满足题目要求。代码:class Solution {public: bool repeatedSubstringPattern(string s) { return (s + s).find(s, 1) != s.size();...原创 2020-08-24 14:42:11 · 114 阅读 · 0 评论 -
LeetCode 剑指 Offer 18. 删除链表的节点
原题目:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/代码:class Solution {public: ListNode* deleteNode(ListNode* head, int val) { if(head == NULL) return head; ListNode* hair=new ListNode(0),*pre; hair.原创 2020-08-23 09:16:37 · 94 阅读 · 0 评论 -
LeetCode 201. 数字范围按位与
原题目:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/思路一:如果有一位是0,那么该位最终就会是0,基于此,算法描述如下:找出公共前缀,左移。公共前缀,m>>1,n>>1直到两者相等思路二:Brian Kernighan 算法。用于清除二进制串最右边的一。基于此,我们可以找到公共前缀代码:class Solution {public: int ran...原创 2020-08-23 08:42:51 · 92 阅读 · 0 评论 -
LeetCode 328. 奇偶链表
原题目:https://leetcode-cn.com/problems/odd-even-linked-list/代码:class Solution {public: ListNode* oddEvenList(ListNode* head) { if(head==NULL) return head; ListNode*p,*q,*t; p = head;q=head; while(q->next&&a.原创 2020-08-22 09:48:19 · 102 阅读 · 0 评论 -
LeetCode 面试题 02.07. 链表相交
原题目:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/思路:按引用相等,可以使用=判别。代码:class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* p,*q; p = headA,q=headB;..原创 2020-08-22 08:57:30 · 231 阅读 · 0 评论 -
LeetCode 面试题 02.03. 删除中间节点
原题目:https://leetcode-cn.com/problems/delete-middle-node-lcci/思路:用下一个节点的值代替本节点的值,然后修改链表的指向代码:class Solution {public: void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next-&g..原创 2020-08-20 11:15:55 · 127 阅读 · 0 评论 -
LeetCode 529. 扫雷游戏
原题目:https://leetcode-cn.com/problems/minesweeper/思路:dfs,注意规则就好代码:class Solution { int x[8] = {-1,-1,-1,0,0,1,1,1}; int y[8] = {-1,0,1,-1,1,-1,0,1}; void dfs(vector<vector<char>>& board, int p, int q){ int cou.原创 2020-08-20 10:59:33 · 138 阅读 · 0 评论 -
LeetCode 面试题 03.05. 栈排序
原题目:https://leetcode-cn.com/problems/sort-of-stacks-lcci/思路:用栈实现插入排序(使用辅助站)代码:class SortedStack { stack<int> s1,s2;public: SortedStack() { } void push(int val) { while(!s1.empty() && s1.top()<v..原创 2020-08-18 08:33:04 · 143 阅读 · 0 评论 -
LeetCode 剑指 Offer 30. 包含min函数的栈
原题目:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/思路:使用两个栈实现,一个存元素,一个存最小值。当然也可以使用结构体和链表来做代码:class MinStack { stack<int>s1,s2;public: /** initialize your data structure here. */ MinStack() { } ..原创 2020-08-18 08:22:08 · 89 阅读 · 0 评论 -
LeetCode 705. 设计哈希集合
原题目:https://leetcode-cn.com/problems/design-hashset/我这确实是哈希【手动狗头】代码:class MyHashSet { vector<bool> tmp;public: /** Initialize your data structure here. */ MyHashSet() :tmp(vector<bool> (1000001)){ } void ..原创 2020-08-17 09:34:58 · 96 阅读 · 0 评论 -
LeetCode 1472. 设计浏览器历史记录
原题目:https://leetcode-cn.com/problems/design-browser-history/代码:class BrowserHistory { vector<string> tmp; int pos;public: BrowserHistory(string homepage):pos(-1) { visit(homepage); } void visit(string url) {.原创 2020-08-17 09:28:25 · 174 阅读 · 0 评论 -
LeetCode 706. 设计哈希映射
原题目:https://leetcode-cn.com/problems/design-hashmap/思路:哈希表的定义,我是直接映射的代码:class MyHashMap {private: vector<int> tmp;public: /** Initialize your data structure here. */ MyHashMap() { tmp.resize(100002); } ..原创 2020-08-17 08:53:43 · 119 阅读 · 0 评论 -
LeetCode 110. 平衡二叉树
原题目:https://leetcode-cn.com/problems/balanced-binary-tree/思路:采用自底向上的方法,这样时间复杂度是o(n),如果是自顶向上o(n*n)先序遍历,如果返回-1表示不平衡,代码:class Solution {public: bool isBalanced(TreeNode* root) { return recur(root) != -1; } int recur(TreeN..原创 2020-08-17 08:36:07 · 94 阅读 · 0 评论 -
LeetCode 面试题 03.06. 动物收容所
原题目:https://leetcode-cn.com/problems/animal-shelter-lcci/思路:使用两个队列实现。动物的编号是自增的代码:class AnimalShelf {private: queue<int> cat,dog;public: AnimalShelf() { } void enqueue(vector<int> animal) { if(animal..原创 2020-08-16 09:47:58 · 202 阅读 · 0 评论 -
LeetCode 1286. 字母组合迭代器
原题目:https://leetcode-cn.com/problems/iterator-for-combination/思路:使用回溯把组合存起来。代码:class CombinationIterator {private: int cur; vector<string> ans; void dfs(string& characters, int& combinationLength,int index,string&a..原创 2020-08-16 09:30:08 · 115 阅读 · 0 评论