
每日一题
文章平均质量分 55
山夜曾有月归来
睡到二三更时凡功名皆成梦幻,想到一百年后无少长俱是古人
展开
-
[每日一题]Leetcode206. 反转链表和Leetcode92. 反转链表 II
2021/3/18,Leetcode206. 反转链表题意如下:反转链表有很多种做法,可以用栈之类的操作,时间复杂度都是O(N),但是用栈会增加空间复杂度。这里我们用时间复杂度和空间复杂度都最低的双指针法。简单点说就是头插法,将每一个节点都插在当前链表的表头。说起来容易,代码实现要特别注意指针赋值的顺序。c++参考代码如下:class Solution {public: ListNode* reverseList(ListNode* head) { if(!head)原创 2021-03-18 20:08:28 · 245 阅读 · 0 评论 -
[每日一题]Leetcode115. 不同的子序列
今天的每日一题是Leetcode115. 不同的子序列,题意如下:字符串匹配的题我们可以想到用动态规划,两个字符串匹配的题可以用二维动态规划。我们定义dp[i][j]为:第一个字符串从0到i这个长度中第二个字符串从0到j这个长度的字符串出现的次数。 首先dp[i][0]的值肯定都为1,因为任意串都有一个空的子序列。然后我们就用两层for循环来补全这个二维数组,这样会出现两种情况:1.当前扫到的两个字符相等,那么就选择用这个字符匹配另一个字符串(dp[i+1][j+1]=dp[i][j]),也可以不用这原创 2021-03-17 17:45:15 · 127 阅读 · 0 评论 -
[每日一题]Leetcode59. 螺旋矩阵 II
2020/3/16,今天的每日一题是Leetcode59. 螺旋矩阵 II,题意如下:这道题和昨天的那个很像,思路也差不多。没看过的点这里《[每日一题]Leetcode54. 螺旋矩阵》。只需要自己定义一个二维数组然后按照之前的题的方向变换。数组初始值全为0,有值的说明被填过了。然后改变方向就可以了。c++代码如下:class Solution {public: vector<vector<int>> generateMatrix(int n) { int原创 2021-03-16 19:44:36 · 157 阅读 · 0 评论 -
[每日一题]Leetcode54. 螺旋矩阵
2021/3/15,今天的每日一题是Leetcode54. 螺旋矩阵,题目大意如下:这道题就是一个考验思路和编程基本功的问题,我们通过观察可以发现旋转的方向是固定的,并且矩阵的大小旋转一圈就少了一圈。所以我们可以通过控制矩阵的边界和方向进行输出,思路很简单,具体实现请看代码:class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int原创 2021-03-15 21:56:53 · 331 阅读 · 4 评论 -
[每日一题]Leetcode706. 设计哈希映射
2021/3/14,今天的每日一题是Leetcode706. 设计哈希映射,题意如下:和昨天的设计哈希集合类似,没有看过的可以移步《[每日一题]Leetcode705. 设计哈希集合》,区别哈希映射要存的是两个值,我们可以用pair这个数据结构实现,具体代码也差不多。c++参考代码:class MyHashMap {public: vector<list<pair<int,int>>> p; static const int mod = 977;原创 2021-03-14 13:42:13 · 155 阅读 · 0 评论 -
[每日一题]Leetcode331. 验证二叉树的前序序列化
2021/3/12,今天的每日一题是Leetcode331. 验证二叉树的前序序列化,题意如下:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录例如:例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或原创 2021-03-13 22:15:51 · 89 阅读 · 0 评论 -
[每日一题]Leetcode705. 设计哈希集合
今天的每日一题是Leetcode705. 设计哈希集合,题意如下:不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。首先我们想到的方法是用一个标记数组标记所有的数字,这种方法虽然能O(1)的实现各种操作。但是这种原创 2021-03-13 14:38:44 · 207 阅读 · 0 评论 -
[每日一题]Leetcode227. 基本计算器 II
今天的每日一题是Leetcode227. 基本计算器 II,题意如下:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。1 <= s.length <= 3 * 105s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内题目数据保证答案是一个 32-bit 整数这道题是昨天的进阶版,但是这道题少了括号,多了乘原创 2021-03-11 16:46:14 · 559 阅读 · 0 评论 -
[每日一题]Leetcode224. 基本计算器
今日每日一题是Leetcode224. 基本计算器,题意如下:实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。1 <= s.length <= 3 * 105s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成s 表示一个有效的表达式例:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23这道题虽然是个困难难度的题,但是思路却非常简单。基本上都能想到用一个栈来存表达式。因为这道题只有加减运算,只有括号是最先优先级。所以我们将表达式入栈当遇到右括原创 2021-03-10 17:00:34 · 202 阅读 · 0 评论 -
[每日一题]Leetcode11. 盛最多水的容器
2021/3/9今天的每日一题是Leetcode11. 盛最多水的容器,这道题曾经在某个热身赛里碰到过,当时想错了就没做出来,现在看到真是感慨良多。题意如下:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。n = height.length2 <= n <= 3 *原创 2021-03-09 18:28:57 · 137 阅读 · 0 评论 -
[每日一题]Leetcode132. 分割回文串 II
2021/3/8今天的每日一题是Leetcode132. 分割回文串 II,是昨天那道题的进阶版,题意如下:给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。1 <= s.length <= 2000首先看到这个题的数据范围是2000,用昨天的方法(昨天方法的复杂度为N*2^N)肯定会超时。这道题只需要求分割次数,并不需要找出每一种分割方法,所以可以不用昨天的暴力搜索方法。可以考虑之前的求最长递增子序列的方法,没有看过的可以去瞅一眼原创 2021-03-08 21:02:52 · 122 阅读 · 0 评论 -
[每日一题]Leetcode131. 分割回文串
2021/3/7。今天的每日一题是Leetcode131. 分割回文串,题意如下:给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。首先要仔细读题,题目要求是将s分割成子串,注意理解题意。官方给的题解是回溯+动态规划,但是我看下来其实也就是用了个dfs,或者说是dfs本身就带有回溯的思想吧,反正对我来说把它当成dfs来好理解一些。dfs和回溯的相似之处就是都分为三步:做选择 -> 递归 ->原创 2021-03-07 21:51:46 · 298 阅读 · 0 评论 -
[每日一题]Leetcode496. 下一个更大元素 I和Leetcode503. 下一个更大元素 II
2021/3/6今天的每日一题是Leetcode496. 下一个更大元素 I和Leetcode503. 下一个更大元素 II,因为是同类型的题所以就放一块写了。Leetcode496. 下一个更大元素 I题意:给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在原创 2021-03-06 15:42:46 · 143 阅读 · 0 评论 -
[每日一题]Leetcode232. 用栈实现队列
2021/3/5今天的每日一题是Leetcode232. 用栈实现队列,美好的一天从一道简单题开始☺,题意如下:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你原创 2021-03-05 13:31:05 · 133 阅读 · 0 评论 -
[每日一题]Leetcode300. 最长递增子序列和Leetcode354. 俄罗斯套娃信封问题
2021/3/4今天正式开始每日一题,今天的题是Leetcode354. 俄罗斯套娃信封问题,在做此题之前先要了解Leetcode300. 最长递增子序列,所以我们先以此题入手。300题题意为给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。第一个想到的是动态规划,定义dp[i]为以nums[i]为结尾的最长递增子序列,所以原创 2021-03-04 17:42:22 · 358 阅读 · 1 评论