leecode
不定期更新一些leetcode题的题解
Lynko
这个作者很懒,什么都没留下…
展开
-
leetcode 水位上升的泳池中游泳
在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。你从坐标方格的左上平台 (0,0) 出发。最少耗时多久你才能到达坐标方格的右下平台 (N-1, N-1)?题解题解原创 2021-01-30 20:37:47 · 226 阅读 · 0 评论 -
leetcode最小体力消耗路径
你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。请你返回从左上角走到右下角的原创 2021-01-29 15:34:54 · 177 阅读 · 0 评论 -
leetcode用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )题解首先队列是先进先出的 而栈贼是后进先出的 比如一个队列进入23456 然后实现deleteHead操作首先删除的是2 然后栈的话只能取栈顶而不能直接取栈底部,所以我们可以利用栈后进先出的特性来解决这个问题用两个栈来实现..首先第一个栈和第二个栈存的相反第一个栈的顺序和队列存的原创 2021-01-27 16:09:20 · 111 阅读 · 0 评论 -
leetcode 单词拆分
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。简要题解题意就是询问字符串s是否可以完全被wordDict使用如果可以即返回真我们用dp记录一下改单词是否被使用过了要是从头到尾都被使用过了因为u我们设置了第0为dp值为0所以class Solution {public: bool wordBreak(string s, vector&原创 2021-01-07 15:14:19 · 94 阅读 · 0 评论 -
leetcode 省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。简要题解显然可以看出这是一个并查集的模板原创 2021-01-07 12:56:14 · 259 阅读 · 2 评论 -
leetcode 之最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。###题解有马拉车和kmp的解法 博主因为太久没写马拉车算法忘记了马拉车算法 所以直接使用kmp算法来解决本质就是求文本串正序和逆序的最长公共子串长度,其实就是kmp的next数组的求法 所以我们先将串逆置然后添入当前串之后就是寻求新的文本串的循环节长度了。具体实习代码如下class Solution {public: string shortestPalindrome(strin原创 2021-01-05 21:33:48 · 243 阅读 · 0 评论 -
leetcode 830较大的分组的位置
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。我们称所有包含大于或等于三个连续字符的分组为 较大分组 。找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,原创 2021-01-05 18:36:29 · 63 阅读 · 0 评论 -
leetcode之链表中下一个更大的节点
给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, … 。每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项...原创 2020-04-24 21:47:24 · 279 阅读 · 0 评论 -
Lettcode之 二叉树的最近公共祖先
简要题解:递归解法找到两个节点分别是在左子树还是在右子树中 要是分别在左右子树中根节点即为最近公共祖先要是都在左子树即是递归返回来左节点为最近公共祖先节点,要是都在右子树跟其一致。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...原创 2020-04-24 21:07:21 · 83 阅读 · 0 评论 -
leetcode之数组的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数简要题解:利用归并排序求逆序对即可;在合并数组的时候 当右边的数组大于左边的数组的时候答案就加上左边还未进行比较的数组个数即可mid-i+1.简要代码如下:class Solution {public: vector<int>tem; ...原创 2020-04-24 10:54:40 · 235 阅读 · 0 评论 -
leetcode之删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。简要题解:设置双指针遍历一整个链表遇到重复的就把当前节点接到下一个节点。当前节点位置不变以防下一段还遇到重复的。主要代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListN...原创 2020-04-23 11:31:03 · 121 阅读 · 0 评论 -
leetcode之平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树简要题解dfs遍历左右子树的深度判断一下即可主要代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...原创 2020-04-23 11:04:23 · 95 阅读 · 0 评论 -
leetcode之硬币
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007简要题解:完全背包简单题,枚举币值,统计次数即可。主要代码如下class Solution {public: int mod=1000000007; int waysToChange(int n) { int a[]={1,...原创 2020-04-23 10:29:01 · 730 阅读 · 2 评论 -
Leetcode之跳跃游戏
简要题意:首先你在第一个位置,元素中每一个位置代表你所能跳跃的最长距离。问你是否能走到最后一个位置。首先我们考虑倒序的解法从后往前当这个位置的数值大于等于到达最后一个位置所需要的距离我们就将该距离设为1,否则就将距离增加1。主要代码如下class Solution {public: bool canJump(vector<int>& nums) { ...原创 2020-04-17 10:58:29 · 134 阅读 · 0 评论 -
leetcode之二叉树层序遍历
利用队列的先进先出的特点把每一层的元素push进去后在一次输出出来。主要代码如下/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x),...原创 2020-04-17 12:54:40 · 94 阅读 · 0 评论 -
Leetcode之删除链表
利用快慢指针来解决此问题 ,具体代码如下./** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pu...原创 2020-04-17 13:29:15 · 101 阅读 · 0 评论 -
leetcode盛最多水发容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。简要题解:利用双指针来解决往中间缩减。主要代码如下:class Solution {public: int maxArea(vector&...原创 2020-04-18 10:33:04 · 100 阅读 · 0 评论 -
leetcode之二叉树齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。简要题解:该题和层序遍历一样利用队列来解决不过由于要蛇形遍历因此我们就加了一个变量控制其转向主要代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * ...原创 2020-04-18 10:43:33 · 98 阅读 · 0 评论 -
leetcode之旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。简要题解:先算出头节点是链表中那个数字然后把链表拼接成一个循环链表后 找出找出头节点的位置 把尾节点接空指针即可主要代码如下;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode...原创 2020-04-18 10:57:45 · 80 阅读 · 0 评论 -
leetocde之二叉树层序遍历II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)解法更二叉树层序遍历一样,直接使用队列来解决,把数据存入vector最后翻转一下即可。主要代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode...原创 2020-04-19 13:36:34 · 105 阅读 · 0 评论 -
leetcode之链表求和
给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。简要题解直接相加即可; 代码如下/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2020-04-19 14:13:22 · 338 阅读 · 0 评论 -
leetcode之矩阵中的路径
矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“...原创 2020-04-19 14:42:41 · 150 阅读 · 0 评论 -
leetcode之岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。简要题解:遍历一下所有的岛屿遇到1的地方即从这个地方开始搜索 找到1的地方即设为0,然后遍历完整个数组即可。主要代码如下:class Solution {public: in...原创 2020-04-20 11:00:52 · 165 阅读 · 0 评论 -
leetcode之分隔链表
给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。简要题解先计算出链表的长度,然后把求出每段链表分配的平均值,之后再算出没剩余...原创 2020-04-20 13:27:56 · 145 阅读 · 0 评论 -
leetcode之LRU缓存
设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(ke...原创 2020-04-20 19:53:50 · 168 阅读 · 0 评论 -
leetcode之统计优美子数组
给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。简要题解首先我们遍历一遍数组,为奇设为1不为奇设为0;之后记录一下之前缀和出现的次数和前缀和的大小 然后答案即为当前前缀和大小-k的数值出现的次数和相加即可。主要代码如下:class Solution {public:...原创 2020-04-21 09:19:01 · 139 阅读 · 0 评论 -
leetcode之树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。简要题解:首先判空只要两颗树判空处理只要为空,只要有一颗树为空时即返回空处理。然后dfs遍历两颗子树,分别对(A,B)(A-left,B)(A->right,B)判断只要有一个满足即为为真。主要代码如下:/** * Definition for ...原创 2020-04-21 09:32:54 · 152 阅读 · 0 评论 -
leetcode之重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。简要题解:定义一个vector然后把链表插入后直接根据vector操作即可简要代码如下:/** * Definition for singly-linked list. * struct ListNod...原创 2020-04-21 10:25:20 · 136 阅读 · 0 评论 -
leetcode之二叉树右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值简要题解:二叉树进行层序遍历 输出每层最后一个节点即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;...原创 2020-04-22 09:49:26 · 125 阅读 · 0 评论 -
leetcode之 从链表中删去总和值为零的连续节点
给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。简要题解;暴力遍历每一段然后当前段为0的话就把段头指针指向段尾的下一个节点。代码如下:/** * Definition for singly-linked list. * struct ListNode { * ...原创 2020-04-22 10:21:43 · 147 阅读 · 0 评论 -
leetcode之剪绳子||
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。简要题解当n大于4的时候每段绳子尽量剪成3 要是不能被3整除倒数第二段和倒数第一段的绳...原创 2020-04-22 10:48:12 · 184 阅读 · 0 评论