LeetCode
lyx_2016
蒟蒻,OIer
展开
-
【LeetCode834】【树形dp】每日一题day35
道题要求每个节点到其他所有节点的距离之和先考虑一个节点到其他所有节点的距离之和的问题。看到距离首先我想到的就是最短路,但是树上没啥最短路_(:з」∠)_然后我就没想出什么行之有效的方法_(:з」∠)_看了题解是树形dp,那么问题来了,为什么呢?这道题也没有什么最值,看起来距离之和是一个很固定的东西,一点都不动态。其实我觉得,与其说是dp,不如说是递推。这里的中心思想就是从叶子往上推,处理距离distSum[root] = sigma(distSum[root'sChild] + childSum[原创 2020-10-16 11:16:13 · 210 阅读 · 0 评论 -
【LeetCode24】【链表/递归】每日一题day34
这道题写是能写,就是又臭又长,看了题解的递归写法之后恍然大悟。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, List原创 2020-10-16 10:21:56 · 116 阅读 · 0 评论 -
【LeetCode416】【DP】每日一题day33
好久不见~我一开始看到,元素和是一个定值嘛,我觉得可以转换成LeetCode40 组合总和II,找nums里面和为一个定值的元素,就写了回溯,结果超时了class Solution {public: bool recall(int cnt, int sum, map<int, int> appearNumber, vector<int> nums) { if (sum == 0) return true; if (sum <原创 2020-10-12 10:36:27 · 101 阅读 · 0 评论 -
【LeetCode18】【双指针】每日一题day32
题面:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。这道题我一看,和组合总和差不多嘛,十分钟就写了个回溯,结果一堆bugTvT 虽然它最后还是超时了,但是有一些写回溯的心得我要写一下class Solution {public: void recall(vector<int> nums, vector&l原创 2020-10-05 11:36:55 · 102 阅读 · 0 评论 -
【LeetCode2】【链表】每日一题 day31
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next)原创 2020-10-04 19:35:12 · 95 阅读 · 0 评论 -
【LeetCode1】【哈希】每日一题 day30
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { map<int, int> cha; vector<int> ans; int size = nums.size();原创 2020-10-03 21:30:32 · 1364 阅读 · 2 评论 -
【LCP19】【DP】每日一题day29
天哪!LeetCode的每日一题终于不是树啦!前几天觉得题目类型有些重复,都是一看就会写的_(:з」∠)_ 开始了动态规划!字符串!!正是我薄弱的地方,希望接下来一个月都是这些能让我好好学习学习这道题一眼就能看出来是我不会的dp。因为[红,黄,红]每一块的长度不固定,真的不知道该怎么设定它的状态,如何状态转移也毫无头绪,好像当前叶子和它的前一片叶子关系不大。我们试着按照动态规划的思路来分析一下:一、...原创 2020-10-02 11:02:59 · 180 阅读 · 0 评论 -
【LeetCode235】【LCT】每日一题day28
这道题是要找二叉搜索树的最近公共祖先,就是从根往下搜的第一个在两个值中间的数,如果当前根比两个值都大,就递归搜左子树,都小就右子树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2020-09-29 09:44:47 · 88 阅读 · 0 评论 -
【LeetCode113、106】【递归、DFS】每日一题day26、27
LeetCode113…太裸了,实在没啥好说的,但是我写的程序有点慢,就先把代码贴在这看看以后能不能优化一下。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */cla原创 2020-09-26 17:13:53 · 81 阅读 · 0 评论 -
【LeetCode501】【中序遍历】每日一题day25
/** * 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: void bianli(TreeNode *t, int &a原创 2020-09-24 20:48:23 · 96 阅读 · 0 评论 -
【LeetCode617】【递归】每日一题day24
很简单的一个递归嘛,我就建了一颗新树/** * 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: void hebing(原创 2020-09-23 17:46:18 · 71 阅读 · 0 评论 -
【LeetCode968】【贪心】每日一题day23
题面:给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。一遇到这种题我就一点办法没有TvT一开始觉得,是dp吧,很明显是要从子节点推上来。但是子节点就那么几种情况,而且每种情况下当前节点要做出什么选择也是确定的,因此当前节点的选择与子节点是如何走过来的无关,所以不是dp是贪心。那么考虑状态,放相机和没放相机,但是没放相机的时候又要分为需要放和不需要放。于是:0 表示当前节点需要被监控1 当前节点没放原创 2020-09-22 10:22:39 · 87 阅读 · 0 评论 -
【LeetCode78】【位运算/递归】每日一题day21
这个是在补之前的题。这道题就是让你输出一个无重复数字的序列的全部子集,听起来hin简单,但是我却想不出来怎么做。看了题解之后两种方法都很简单,但是我自己又不会写。方法一:每一个数字有取和不取两种状态,想到了什么?二进制。于是每次+1就可以枚举出所有情况class Solution {public: vector<int> t; vector<vector<int>> ans; vector<vector<int>>原创 2020-09-21 19:29:39 · 114 阅读 · 0 评论 -
【LeetCode538】【中序遍历】每日一题day22
天哪这道题大有文章哈哈哈哈哈哈哈题目里面很重要的一点是二叉搜索树,而我对这一点完全没有在意…二叉搜索树是左儿子小于自己,右儿子大于自己,左右子树又都满足这个条件的一棵树。那么知道这个之后就能发现如果反向中序遍历,得到的就是一个由大到小的序列,直接累加求前缀和就行了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *r原创 2020-09-21 10:25:34 · 90 阅读 · 0 评论 -
【LeetCode404】【递归】每日一题day20
/** * 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: void diGui(TreeNode *t, int &am原创 2020-09-19 19:02:10 · 78 阅读 · 0 评论 -
【LeetCode47】【全排列】每日一题day19
含有重复数字的数组的全排列class Solution {public: void permutation(vector<int> &nums, int cnt, vector<int> &res, vector<bool> &used, set<vector<int>> &pre) { if (cnt == nums.size()) { p原创 2020-09-18 09:26:41 · 156 阅读 · 0 评论 -
【LeetCode37】【回溯】每日一题day18
这道题是补的前几天的题,是我在写LeetCode79单词搜索的时候错过的【社团出去聚餐了quq】这道题又零零散散写了三天。一眼就能看出来是回溯,但是具体要怎么写一时间我还想不出来,感觉限制条件太多,比N皇后还要复杂。之后看了一眼题解,维护三个bool数组col[9][10], row[9][10], block[3][3][10]。col[i][j]表示j这个数字在第i行用没用过。之后按行来遍历回溯【按列或者块都是可以的】。思想是非常简单直白的。class Solution {public:原创 2020-09-17 22:18:25 · 100 阅读 · 0 评论 -
【LeetCode685】【并查集】每日一题day17
昨天day16做了一道二叉树的翻转,迭代或者递归都行,很简单没啥好说的。今天这个并查集…我反省,我没看出来。给你一棵有n个节点,n条边的树,让你找出那条多余的边。考虑有两种情况:1、冲突。即有一个点有两个父亲。这个可以统计每个点的入度,也可以在union的时候判断一下是不是已经有父节点了2、成环。这里用到并查集,连接两个点的时候看看它们是不是已经连上了【这里应该能看出来是并查集的】那么就可能出现三种情况:1、只成环。删掉最后一条成环的边即可。2、只冲突。删掉最后一条起冲突的边即可。3、既冲原创 2020-09-17 21:01:39 · 115 阅读 · 0 评论 -
【LeetCode94】【迭代】每日一题day15
二叉树的中序遍历,递归很好写,但是用迭代要怎么写呢?迭代就是知道了初始条件之后一步步往下推,获得新的条件,继续推。这道题需要用栈储存信息我想到的需要标记它是否访问过,但是我不会改leetcode里面结构体的definition,自己电脑上也还没配leetcode环境【对我一直在它的网页里写题TvT】就先把代码放在这,回头来再试试/** * Definition for a binary tree node. * struct TreeNode { * int val; * T原创 2020-09-15 23:57:26 · 103 阅读 · 0 评论 -
【LeetCode79】【回溯】每日一题day14
这道题是前天的每日一题,我前天写了一整晚上,昨天时间不多都没有调过,还拉下了两天的题我尽量今天补上。题面:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。思路:遍历整个网格,找到单词开头的那个字母开始搜索,看这个字母的上下左右和单词的下一个字母一不一致,如果一致的话标记访问过再下去递归,如果递归后上下左右都找不到返回false就把访问过的标记去掉。cl原创 2020-09-15 12:20:00 · 90 阅读 · 0 评论 -
【LeetCode637】【BFS/队列】每日一题day13
/** * 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<double> averageOfL原创 2020-09-12 08:47:43 · 84 阅读 · 0 评论 -
【LeetCode216】【回溯】每日一题day12
class Solution {public: void huiSu(vector<vector<int>> &ans, vector<int> res, int k, int n, int cnt) { if (k == 0 && n != 0) { return; } if (k == 0 && n == 0)原创 2020-09-11 22:23:49 · 87 阅读 · 0 评论 -
【LeetCode 39、40】【回溯】每日一题day10、11
这两道题是组合总数和组合总数II。第一题是在一个无重复数字的数列里可重复取数去组成给定的一个数k,第二题是在有重复数字的数列里每个数只能取一次去组成k。两个题都是回溯嘛。先说第一题,我一开始觉得它有三种情况:1、选它,下一个还选他2、选它,去选下一个3、不选它,去选下一个然后就发现问题了,它同一个答案会输出好几遍,原因是1+3和2是一样的结果,然后我想到了用一个bool值记录它上一次是不是选了它自己,如果是的话就不能走3从这里就开始乱了,后面还出现了漏解的情况…我又一拍脑袋想出了另一种回溯方法原创 2020-09-10 11:30:47 · 92 阅读 · 0 评论 -
【LeetCode77】【回溯】每日一题day9
这道题我一看就不会啊…本来觉得看看题解可能一两个小时都写不完,结果写个回溯试试十几分钟就过了quq 可能做题多了就是想不过都难的感觉吧,最近特别想做题,多做!多做!多做!class Solution {public: void chooseNum(int s, int t, int k, vector<int> &res, vector<vector<int>> &ans) { if (k == 0)原创 2020-09-08 15:37:05 · 80 阅读 · 0 评论 -
【LeetCode 347】【map】每日一题day8
class Solution { typedef pair<int, int> PAIR;public: struct CmpByValue { bool operator()(const PAIR& lhs, const PAIR& rhs) { return lhs.second < rhs.second; } }; vector<int> topKFrequent(原创 2020-09-07 16:18:51 · 84 阅读 · 0 评论 -
【LeetCode107】【BFS】每日一题day7
气死我了气死我了气死我了, while语句右面加了个; 我debug半小时愣是没看着TTTTvTTTT/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So原创 2020-09-06 16:05:12 · 85 阅读 · 0 评论 -
【LeetCode60】【全排列】每日一题day6
class Solution {public: int nums[10]; string getPermutation(int n, int k) { for (int i = 1; i <= n; i++) { nums[i - 1] = i; } for (int i = 1; i < k; i++) { next_permutation(nums原创 2020-09-05 23:24:16 · 126 阅读 · 0 评论 -
【LeetCode257】【DFS】每日一题day5
/** * 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: void search(TreeNode *t, vector<st原创 2020-09-04 09:35:02 · 94 阅读 · 0 评论 -
【LeetCode 51】【N皇后/回溯】【树的遍历】每日一题 day4
参考了这篇题解N皇后问题,典型的回溯。先看暴力做法,就是把第一个皇后放在第一行第一列,然后再把第二个皇后放在第二行,这样试试试不行了就回去,但是你的棋盘已经改了,回去的话再改棋盘就很麻烦题外话:【这里可以发现就是树的前序遍历:根→子树从左到右】【树的遍历共有5中:前序(根→左子树→右子树)、中序(左→根→右)、后序(左→右→根)、bfs、dfs(一枝搜到底,再回到根节点去搜它的其他子树) 我以前不知道它们有什么用_(:з」∠)_原来是可以和实际的搜索结合起来的(看了这篇学到了)】所以我们改成回溯,关键原创 2020-09-03 22:48:26 · 118 阅读 · 0 评论 -
【LeetCode 剑指Offer 20】【模拟】每日一题day3
我我我我我我本来以为这道题很简单不用写题解,但是我写了一个多小时orz还是很没用的在对着答案调模拟题我老是这样,一下子想不到全部的情况,然后就交上对着答案调,这样一点用都没有啊…不过这道题题面里应该给出数值的定义:在 C++ 文档 中,描述了一个合法的数值字符串应当具有的格式。具体而言,它包含以下部分:符号位,即 ++、-− 两种符号整数部分,即由若干字符 0-90−9 组成的字符串小数点小数部分,其构成与整数部分相同指数部分,其中包含开头的字符 \text{e}e(大写小写均可)、可选的原创 2020-09-02 10:49:22 · 131 阅读 · 0 评论 -
【LeetCode486】【递归/dp】每日一题day2
我好菜,题做得太少了,思维的东西不够。这道题第一眼我以为是dp,但是它有两个人,好像不满足无后效性,之后又以为是博弈论,但是它又不像取石子有必败态。又觉得这道题数据范围才20,它肯定是想让我们暴搜,但是暴搜我不会写TvT看了题解,可以递归也可以dp…方法一:递归就比较直观,但是要注意这里用turn将玩家二的得分记为负数,就不用再传一个变量了,之后比较大小的时候也要注意正数和负数的问题。class Solution {public: int predict(vector<int>原创 2020-09-02 09:19:17 · 136 阅读 · 0 评论 -
【LeetCode 841】【DFS】每日一题day1
2020.8.31 第一次class Solution { public: void addEdge(int, int); void dfs (int); struct Edge; struct Node { int number; Edge *firstE; } N[1005]; struct Edge { E原创 2020-08-31 22:25:59 · 138 阅读 · 0 评论