
Leetcode
文章平均质量分 93
Leetcode题解
BNDSllx
算法自媒体公众号:GTAlgotirhm,欢迎关注转发!
https://mp.weixin.qq.com/s?__biz=Mzg3NzMzNzU1MA==&mid=2247484346&idx=3&sn=7a3cf5f25cb8df7a958842369b4faca4&chksm=cf25cd1bf852440d4d68b75b023d547b568c06d830f0f0fff50b216d73fa3bd848ace6e7cc28&token=1029780947&lang=zh_CN#rd
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
层序遍历?看这一篇就够了!
点关注不迷路1.树的层序遍历顾名思义,对于树型结构,层序遍历就是按层从上到下,每层按一定顺序对树的节点进行遍历。我们通过如图所示的二叉树进行说明:对于左边的二叉树,按层划分后可得到右边的分层结构。如果按照每层从左到右的遍历逻辑,这棵二叉树的层序遍历序列就是 [1,4,2,7,20,5][1, 4, 2, 7, 20, 5][1,4,2,7,20,5]。通过代码如何实现呢?一般地,我们利用队列 queuequeuequeue 作为容器,按照如下逻辑进行遍历:// 0. 声明队列queue<T原创 2021-01-09 12:24:35 · 19404 阅读 · 2 评论 -
LeetCode 第 222 场周赛 题解
第 222 场周赛题目1:5641. 卡车上的最大单元数题目描述:请你将一些箱子装在 一辆卡车 上。给你一个二维数组 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi] :numberOfBoxesi 是类型 i 的箱子的数量。numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize原创 2021-01-03 12:39:11 · 2990 阅读 · 0 评论 -
LeetCode 第 219 场周赛 题解
第 219 场周赛关注我们,查看更多优质题解题目1:5625. 比赛中的配对次数思路:模拟代码:class Solution {public: int numberOfMatches(int n) { int ret = 0; while(n > 1) { int cur = n / 2; // 比赛次数,也是晋级队伍数量 ret += cur; // 计入比赛场次 n -= c原创 2020-12-13 12:19:43 · 287 阅读 · 0 评论 -
LeetCode 第 218 场周赛 题解 C++
第 218 场周赛给作者三连!!!题目1:5617. 设计 Goal 解析器思路:模拟代码:class Solution {public: string interpret(string s) { int n = s.size(); int i = 0; string ret = ""; while(i < n) { if(s[i] == '(' && s[i + 1] == '原创 2020-12-06 13:07:21 · 406 阅读 · 2 评论 -
LeetCode 第 217 场周赛 题解 C++
第 217 场周赛来看完整版题解,给作者三连!!!题目1:5613. 最富有客户的资产总量思路:模拟代码:class Solution {public: int maximumWealth(vector<vector<int>>& a) { int n = a.size(); int m = a[0].size(); int res = 0, pos = 0; for(int i = 0; i原创 2020-11-29 16:10:41 · 344 阅读 · 1 评论 -
LeetCode 第 216 场周赛 题解
LeetCode 第 216 场周赛来看配图版题目1:5605. 检查两个字符串数组是否相等思路:模拟将两个数组的字符串分别按序拼接,然后比较两字符串是否相等即可。代码:class Solution {public: bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) { string a = "", b = ""; for原创 2020-11-22 16:51:31 · 297 阅读 · 0 评论 -
LeetCode 第 202 场周赛 题解
第 202 场周赛题目1:5185. 存在连续三个奇数的数组思路:暴力签到题,暴力遍历即可。代码:class Solution {public: bool threeConsecutiveOdds(vector<int>& a) { int len = a.size(); for(int i = 0; i <= len - 3; i++) { if(a[i] % 2 == 1 && a[i原创 2020-08-16 13:50:37 · 216 阅读 · 0 评论 -
Leetcode 第30场双周赛
A.转变日期格式题目链接:https://leetcode-cn.com/problems/reformat-date/第一眼看到这题就觉得用Python做会很简单,但是我的Python实在是不太行,所以就拿C++硬怼了。C++:class Solution {public: string reformatDate(string s) { string M[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Au原创 2020-07-13 11:32:49 · 162 阅读 · 0 评论 -
Leetcode 面试题64. 求1+2+…+n 题解
题目链接:https://leetcode-cn.com/problems/qiu-12n-lcof/官方题解这次是真的帅考虑 a && b,如果 a 为 false 则不会再执行 b, 语句自动退出考虑 a || b,如果 a 为 true 则不会再执行 b,语句执行下去这道题来说,从 n 加到 1,只需要让 n = 0 时不再加即可。代码如下:class Solution {public: int sumNums(int n) { int res原创 2020-06-02 00:25:26 · 165 阅读 · 0 评论 -
Leetcode 5409. 检查一个字符串是否包含所有长度为 K 的二进制子串 题解
题目链接:https://leetcode-cn.com/problems/check-if-a-string-contains-all-binary-codes-of-size-k/难顶,一看见子串这种东西就晕乎看了题解,滑动窗口枚举所有出现的子串,最后判断总个数是否与预期相同即可。代码如下:class Solution {public: bool hasAllCodes(string s, int k) { int cur = 0; for(int原创 2020-05-31 09:51:22 · 282 阅读 · 0 评论 -
Leetcode 752. 打开转盘锁 题解
题目链接:https://leetcode-cn.com/problems/open-the-lock/字符串转换成0-10000内的数字记录状态。写两个函数next和last得到变换后的状态。deadend中的小可爱们标记状态不可访问即可。代码如下:class Solution {public: bool vis[10000]; int a[4]; int trans(string s) { int res = 0; for(int原创 2020-05-26 13:51:44 · 224 阅读 · 0 评论 -
Leetcode 994. 腐烂的橘子 题解
题目链接:https://leetcode-cn.com/problems/rotting-oranges/一分钟写完系列,可以直接把二维坐标一维化代码如下:class Solution {public: bool inmap(int xx, int yy, int n, int m) { return xx >= 0 && xx < n && yy >= 0 && yy < m; }原创 2020-05-26 10:54:15 · 223 阅读 · 0 评论 -
Leetcode 面试题 04.03. 特定深度节点链表 题解
题目链接:https://leetcode-cn.com/problems/list-of-depth-lcci/一年半没有写广搜了,重新上手的第一道题还一次过了就很nice由于要不同深度分类,所以抛开传统的while(!q.empty()),还需要在里面每次计算q.size(),作为这一层的操作次数。由于每次要把当前遍历节点的左右子树继续push到队列中,所以队列要用TreeNode*型,不然只存int型的值不好判断左右子树。代码如下:/** * Definition for a binar原创 2020-05-24 00:26:55 · 240 阅读 · 0 评论 -
Leetcode 980. 不同路径 III 题解
题目链接:https://leetcode-cn.com/problems/unique-paths-iii/典型题找路径数或者最长路径用深搜,找最短路径用宽搜由于要求每个点都要经历过一次,所以用cnt计算出所有无障碍空格数,然后每次深搜时都递减。求路径数,所以遍历记录数组vis要时刻回溯,即当前状态下标记为true,深搜结束后再标记回false,以便于下一次从不同路径仍能到达该点代码如下:class Solution {public: int res = 0; bool原创 2020-05-22 11:21:44 · 390 阅读 · 0 评论 -
Leetcode 886. 可能的二分法 题解
题目链接:https://leetcode-cn.com/problems/possible-bipartition/最近学习的二分染色,开始 color 数组初始化为 -1,深搜打进去,每次的 dislike 对象若没染色,则染色为当前颜色的对立颜色(0、1),并继续深搜,否则若跟当前颜色相同,说明有错误,return false即可代码如下:class Solution {public: bool dfs(int pos, vector<int>& color,原创 2020-05-20 18:24:19 · 334 阅读 · 0 评论 -
Leetcode 1315. 祖父节点值为偶数的节点和 题解
题目链接:https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent/第一眼看到就想到用两个bool值参数。因为一般的DFS都是一个参数标记状态,这次要考虑祖父节点,所以用两个参数 t1 和 t2,更新如下:若当前 t2 为 true,说明其祖父节点为偶数,res += root->val,更新t2 = false若当前 t1 为 true,说明其父节点为偶数,标记t2 = true, t1 = fal原创 2020-05-18 10:45:40 · 211 阅读 · 0 评论 -
Leetcode 841. 钥匙和房间 题解
题目链接:https://leetcode-cn.com/problems/keys-and-rooms/用栈更好搞,只要有钥匙且没被遍历过的房间就入栈,每次取栈顶元素继续遍历。代码如下:class Solution {public: bool canVisitAllRooms(vector<vector<int>>& rooms) { stack<int> s; bool vis[rooms.size()];原创 2020-05-18 10:25:10 · 213 阅读 · 0 评论 -
Leetcode 130. 被围绕的区域 题解
题目链接:https://leetcode-cn.com/problems/surrounded-regions/边界的O和与之相连的不会被改,所以干脆先把边界及其相连的所有O区域全部搜出来变成个别的保护一下,然后全图剩下的O就都得变成X了,最后再把保护的变回O就可以了代码如下:class Solution {public: void dfs(int x, int y, vector<vector<char>>& board) { if(bo原创 2020-05-14 14:17:06 · 170 阅读 · 0 评论 -
Leetcode 1443. 收集树上所有苹果的最少时间 题解
题目链接:https://leetcode-cn.com/problems/minimum-time-to-collect-all-apples-in-a-tree/这周周赛的一道题,但是当时没弄出来。做深搜tag正好碰上了就刚一刚开始设计的dfs是 int 型,返回步数,但是不知道为啥TLE:class Solution {public: bool vis[100005]; int dfs(int pos, vector<vector<int>> e原创 2020-05-14 13:05:10 · 419 阅读 · 0 评论 -
Leetcode 模拟面试Ⅱ 记录
为什么难度从2easy1medium突然就变成了2medium1hard,自闭自闭1.最大宽度坡(中等)题目链接:https://leetcode-cn.com/problems/maximum-width-ramp/差点就死在第一题手上了…最开始的思路是暴力+剪枝,剪枝的思路就是对应每一个起始点得到的最长距离,作为下一次比较的初始距离。比如样例1里面先对起始点6求最大结果,为2(2 - 0),下一次对起始点0求解时,直接从 0 + 2 开始往后遍历。然后就TLE了一个50000个数据的递减自原创 2020-05-14 00:18:31 · 293 阅读 · 0 评论 -
Leetcode 模拟面试Ⅰ 记录
这周开始间接做一做模拟面试题,一个半小时随机三道题。第一次很开心,运气好一个小时就搞出来了:1.旋转字符串(简单)题目链接:https://leetcode-cn.com/problems/rotate-string/由于tag是简单,给的长度又都是100之内,当然开开心心的 O(n^2)暴力啦!代码如下:class Solution {public: bool rotateString(string A, string B) { if(A.size() != B.原创 2020-05-12 16:26:10 · 528 阅读 · 0 评论 -
Leetcode 647. 回文子串 题解(Shout out to 橙子哥)
题目链接:https://leetcode-cn.com/problems/palindromic-substrings/看了大佬的题解,整理代码如下:一、中心扩展法class Solution {public: int countSubstrings(string s) { if (s.empty()) return 0; int size = s.size(), res = 0; for (int i = 0; i < size;原创 2020-05-11 09:22:45 · 172 阅读 · 0 评论 -
Leetcode 523. 连续的子数组和 题解(Shout out to 橙子哥)
题目链接:https://leetcode-cn.com/problems/continuous-subarray-sum/我以为的动态规划:dp这道题的动态规划:前缀和前缀和的复杂度是O(n^2),能AC,但是可以再简化从前向后遍历,记录到当前位置前缀和模k的余数及其下标,若该余数在当前下标之前出现过,则说明这二者之间的子数组满足条件。代码如下:class Solution {public: bool checkSubarraySum(vector<int>&原创 2020-05-09 12:06:27 · 141 阅读 · 0 评论 -
Leetcode 746. 使用最小花费爬楼梯 题解(Shout out to 橙子哥)
题目链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/这题给我看傻了…最后到楼顶不花钱我的天呐代码如下:class Solution {public: int minCostClimbingStairs(vector<int>& cost) { int len = cost.size(); int dp[len + 1]; dp[0] = cost[0原创 2020-05-09 10:47:01 · 208 阅读 · 0 评论 -
Leetcode 1025. 除数博弈 题解(Shout out to 橙子哥)
题目链接:https://leetcode-cn.com/problems/divisor-game/开始动态规划!Respect to 橙子哥,争取缩小差距!维护dp数组,对于dp[i],表示其是否能先手胜利。任意 j 从 1 到 i - 1,如果满足 j 能整除 i 并且 dp[j - i] = 0,说明只要先手选 j ,后手必败代码如下:class Solution {public: bool divisorGame(int N) { bool dp[1050]原创 2020-05-09 10:20:18 · 211 阅读 · 0 评论 -
Leetcode 719. 找出第 k 小的距离对 题解
题目链接:添加链接描述找第k小就套二分找第k小的“距离”,就对距离二分,最小为0,最大为排序后数组头尾元素之差。开心的写一个if(check(mid))先放着,具体怎么实现check()慢慢想。由于要找第k小,所以思路是对每一个mid,找小于等于它的数对有多少组,如果 > k则应该缩小mid(以使更多数对差大于mid),所以主函数就写好了(check为真则 r = mid - 1, ...原创 2020-05-08 14:20:25 · 254 阅读 · 0 评论 -
Leetcode 436. 寻找右区间 题解
题目链接:https://leetcode-cn.com/problems/find-right-interval/以“左端点优先升序,右端点其次升序”的顺序对二维数组排序(要注意记录下标,因为最后要按原顺序输出)。遍历,二分搜索最小的满足条件左端点即可。代码如下:class Solution {public: //新学到的,调用时要加 static 声明静态函数 stat...原创 2020-05-07 22:13:37 · 189 阅读 · 0 评论 -
Leetcode 222. 完全二叉树的节点个数 题解
题目链接:https://leetcode-cn.com/problems/count-complete-tree-nodes/二分搜索,先求深度,然后在最后一层的元素中二分,用check函数确定值是否存在。check函数中,通过要查找数值与根节点值的大小关系确定下一步去左子树还是右子树。特判空树和深度为1的树。代码如下:/** * Definition for a binary t...原创 2020-05-07 09:19:07 · 131 阅读 · 0 评论 -
Leetcode 658. 找到 K 个最接近的元素 题解
题目链接:https://leetcode-cn.com/problems/find-k-closest-elements/二分 + 双指针第一步二分,找到离 x 最近的元素(维护了两个变量 bi 和 ls,标记每次找到的大于 x 的最小元素和小于 x 的最大元素,这样二分结束后可根据这两个变量确定选取哪一个指针指向的元素)第二步双指针,以第一步找到的元素为中心,向两边扩展 k 个位置,然...原创 2020-05-06 12:38:55 · 223 阅读 · 0 评论 -
Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 题解
题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/与典型二分不同,搜到之后还要接着搜。最开始我的思路是搜到一个之后在两边继续二分,但是这样太乱了。之后受启发可以分别求两端点,定义一个二分函数,找到之后根据参数确定下一步往哪边继续搜索。代码如下:class...原创 2020-05-05 22:39:13 · 119 阅读 · 0 评论 -
Leetcode 33. 搜索旋转排序数组 题解
题目链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/由于数组相当于乱序,所以要先找到被打乱的位置。所以第一步二分搜索,找到那个大于数组最末元素的位置,例如示例1中就是那个7的下标。下一步去判断target是在前一部分还是后一部分(分别与数组第一个元素和最后一个元素比较),然后根据所在位置直接二分查找。需要...原创 2020-05-05 21:52:57 · 190 阅读 · 0 评论 -
Leetcode 29. 两数相除 题解
题目链接:https://leetcode-cn.com/problems/divide-two-integers/二分,与模版不同的是,这次的二分左右指针实际上是被除数和除数,例如示例1中,先判断10 > 3,则再判断 10 > 6? 再判断 10 > 12? 以此类推(相当于右指针 * 2),当判断大于为否后,将被除数减去最大已知的幂次,再继续循环(相当于左指针 - 右指...原创 2020-05-05 16:59:23 · 140 阅读 · 0 评论 -
Leetcode 1011. 在 D 天内送达包裹的能力 题解
题目链接:添加链接描述二分搜运力:左指针初始化为最大重量(不然最大的那个运不了),右指针初始化为总重量(假设一天全运完)每次贪心计算当前运力需要的最大天数(因为要求最小运力,所以贪心时直接求最大天数即可),并更新左右指针代码如下:class Solution {public: int shipWithinDays(vector<int>& weights,...原创 2020-05-05 13:57:35 · 236 阅读 · 2 评论 -
Leetcode 1351. 统计有序矩阵中的负数 题解
题目链接:https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix/暴力法是 O(mn) 的复杂度,即一个一个遍历算count写一个二分函数findn找每行的第一个负值元素,并将其下标返回,作为下一行二分查找的右指针起始点。复杂度为O(m * lgn)代码如下:class Solution {...原创 2020-05-04 23:35:04 · 240 阅读 · 0 评论 -
Leetcode 1337. 方阵中战斗力最弱的 K 行 题解
题目链接:https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix/想了半天没想明白跟二分有什么关系,看了题解才明白,用二分先找每一行最后一个军人(查找1)代码如下:class Solution {public: int power(vector<int> v) { int l =...原创 2020-05-04 21:19:25 · 167 阅读 · 0 评论 -
Leetcode 69. x 的平方根 题解
题目链接:https://leetcode-cn.com/problems/sqrtx/二分二分,我还是喜欢果断流代码如下:class Solution {public: int mySqrt(int x) { if(x == 1 || x == 2) { return 1; } int l = 0, r =...原创 2020-05-04 19:12:45 · 327 阅读 · 0 评论 -
Leetcode 35. 搜索插入位置 题解
题目链接:https://leetcode-cn.com/problems/search-insert-position/开始练二分啦!双模版:果断流class Solution {public: int searchInsert(vector<int>& nums, int target) { if(target < nums[0...原创 2020-05-04 15:31:05 · 181 阅读 · 0 评论 -
Leetcode 838. 推多米诺 题解
题目链接:https://leetcode-cn.com/problems/push-dominoes/O(n)遍历两趟算受力,代码如下:class Solution {public: string pushDominoes(string dominoes) { int len = dominoes.size(); int left[100005]...原创 2020-05-03 13:20:03 · 231 阅读 · 0 评论 -
Leetcode 713. 乘积小于K的子数组 题解
题目链接:https://leetcode-cn.com/problems/subarray-product-less-than-k/滑动窗口双指针,这里要求小于k的而非等于k的,所以每次调整窗口后要看看是不是要再算一次。第一次遇到了“超出输出限制”,发现我的stdout爆炸了。。。代码如下:class Solution {public: int numSubarrayProd...原创 2020-05-02 23:30:02 · 168 阅读 · 0 评论 -
Leetcode 930. 和相同的二元子数组 题解
题目链接:https://leetcode-cn.com/problems/binary-subarrays-with-sum/开心滑动窗口,特判可有可无但是对于神奇样例会快一点。记得双指针的界限要放在最前面!!!代码如下:class Solution {public: int numSubarraysWithSum(vector<int>& A, int S...原创 2020-05-02 22:07:23 · 265 阅读 · 0 评论