![](https://img-blog.csdnimg.cn/26556f9809ab4414ad1f693885cd6334.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
文章平均质量分 50
ClimberCoding
基础不牢,地动山摇…
展开
-
LeetCode 876、链表的中间结点
LeetCode 876、链表的中间结点题目题解方法1先遍历一次链表计算出中间结点的位置,第二次遍历指向中间结点。class Solution {public: ListNode* middleNode(ListNode* head) { ListNode* node = head; int count = 0; // 遍历,计算结点个数 while (node) { count++;原创 2021-10-06 18:43:03 · 63 阅读 · 0 评论 -
【017】LeetCode217 存在重复元素
题目217 存在重复元素17.1 官方解析点击这里官方解析就是下面两种解法。17.2 解法1直接通过哈希表查找判断,如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素。class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_set<int> s; for (auto x: nums) {原创 2021-07-08 12:01:06 · 62 阅读 · 0 评论 -
【016】LeetCode225 用队列实现栈
题目225 用队列实现栈16.1 官方解析点击这里16.2 解法1使用一个队列,在弹栈的时候将队列头部元素(除了最后一个元素外)重新添加到队列尾部,此时弹出的元素就是栈顶元素。class MyStack { queue<int> Q;public: /** Initialize your data structure here. */ MyStack() { } /** Push element x onto stack. */原创 2021-07-08 10:40:50 · 53 阅读 · 0 评论 -
【015】LeetCode566 重塑矩阵
题目566 重塑矩阵最关键的一条语句:result[i / c][i % c] = mat[i / n][i % n];15.1 官方解析点击这里class Solution {public: vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) { int m = mat.size(); int n = ma原创 2021-07-07 17:53:13 · 82 阅读 · 0 评论 -
【014】LeetCode303 区域和检索 - 数组不可变
题目303 区域和检索 - 数组不可变14.1 官方解析点击这里直接看下面两种解法即可。14.2 解法1对于一维的数组,可以用 前缀和 来解决此类问题。先建立一个新数组 nsum 存放 nums 每个位置之前所有数字之和。(可以用C++自带的partial_sum函数来建立)也可以直接遍历 nums 数组,通过状态转移方程 nsum[i] = nsum[i - 1] + nums[i] 完成统计。我们需要获取的位置left 和 right 之间的数字之和,只需计算 nsum[right + 1原创 2021-07-07 16:38:18 · 69 阅读 · 0 评论 -
【013】LeetCode332 重新安排行程
题目332 重新安排行程13.1 官方解析点击这里本题和 753. 破解保险箱 类似,是力扣平台上为数不多的求解欧拉回路 / 欧拉通路的题目。13.2 解法1(来自leetcode101 中的解法)先用哈希表记录起止机场,其中键是起始机场,值是一个多重集合,表示对应的终止机场。因为一个人可能做过重复的线路,所以我们需要使用多重集合储存重复值。储存完成之后,就可以利用栈来恢复从终点到起点飞行的顺序,再将结果逆序得到从起点到终点的顺序。class Solution {public: ve原创 2021-07-07 15:32:44 · 67 阅读 · 0 评论 -
【012】LeetCode128最长连续序列
题目128 最长连续序列额外的收获:写代码时尽量避免 for(int i = 0; i < nums.size(); ++i) { } ,在运行中会消耗大量的时间,应该使用 for (auto num : nums) 这种形式的!12.1 官方解析点击这里下面的解法跟官方解析差不多!经过测试,无论自己写的解法还是官方解析,执行用时都是挺落后的,在所有 C++ 提交中击败了不到 20%的用户。实在是惨不忍睹啊!12.2 解法1这个解法是LeetCode 101 中的解法,思路很清晰原创 2021-05-29 17:09:30 · 45 阅读 · 0 评论 -
【补充】LeetCode 实现一个哈希表
补充-哈希表哈希表又称散列表,使用O(n)空间复杂度存储数据,通过哈希函数映射位置从而实现近似O(1)时间复杂度的插入、查找、删除等操作。C++中要查找元素是否在集合中可以使用unordered_set。如需同时存储键和值,则需要用unordered_map。如果元素有穷,并且范围不大,那么可以用一个固定大小的数组来存储或统计元素。如果需要维持大小关系,且插入查找并不过于频繁,则可以使用有序的 set 或 map 来替代 unordered_set 或 unordered_map。实现一个简单的原创 2021-05-28 17:23:24 · 130 阅读 · 0 评论 -
*【011】LeetCode239 滑动窗口最大值
题目239 滑动窗口最大值11.1 官方解析点击这里方法一:优先队列方法二:单调队列方法三:分块 + 预处理11.2 解法1(看到这道题时首先想到的就是暴力解法,但是经过测试,会超出时间限制!因此不可取,下面是 X暴力解法X )class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> result原创 2021-05-28 16:38:56 · 67 阅读 · 0 评论 -
【010】LeetCode 1 两数之和
题目1 [两数之和]@[D6哥哥] :有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。@[JAVA_laji]:梦开始的地方 哈哈哈@[特价热了热凯瑟琳]:梦还没开始就结束了10.1 官方解析点击这里解法1:暴力枚举解法2:哈希表10.2 解法1做这道题最容易想到的就是使用暴力枚举的方法,对数组中每一个数x,寻找数组中是否存在 target - x。注意:在数组中寻找target - x时,每个位于x之前的元素都已经和x匹配过了,因此不需要再次循环;每个元素只能使用一次原创 2021-05-27 20:51:24 · 54 阅读 · 0 评论 -
【009】LeetCode23 合并K个升序链表
题目23 合并K个升序链表9.1 官方解析点击这里(刚做这道题的时候首先想到的是按顺序依次合并两个链表,但自己写出来的总是超时,跟题解中的顺序合并相比过于繁杂,多了很多没用的步骤。)下面将使用几种不同的方法来实现合并链表。解法1:顺序合并解法2:分治合并(两两合并)解法3:使用优先队列合并在看下面几种解法之前,先看一下如何 合并两个有序链表 ?假设链表 a 和 b 的长度都是 n,要在 O(n) 的时间代价以及 O(1) 的空间代价完成合并。我们的宗旨是 [原地调整链表元素的 next 指原创 2021-05-27 20:18:47 · 80 阅读 · 0 评论 -
【补充】LeetCode 优先队列
优先队列优先队列可在O(1)时间内货的最大值,并且可以在O(logn)时间内取出最大值或插入任意值。用数组表示时,位置 i 的结点的父结点位置一定是 i/2 ,它的两个子结点一定是 2i 和 2i+1。class Heap {private: vector<int> heap; // 上浮 void swim(int pos) { while (pos > 1 && heap[pos / 2] < heap[pos])原创 2021-05-26 19:38:35 · 87 阅读 · 0 评论 -
【008】LeetCode739 每日温度
题目739. 每日温度8.1 官方解析点击这里方法一:暴力class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures) { int n = temperatures.size(); vector<int> ans(n), next(101, INT_MAX); for (int i = n - 1;原创 2021-05-26 19:18:39 · 49 阅读 · 0 评论 -
【007】LeetCode20 有效的括号
题目20. 有效的括号7.1 官方解析点击这里方法一:栈遍历给定的字符串 s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合,因此我们将这个左括号放入栈顶。当我们遇到一个右括号时,我们取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,那么字符串 s 无效,返回 False。为了快速判断括号的类型,可以使用哈希表存储每一种括号。哈希表的键为右括号,值为相同类型的左括号。在遍历结束后,如果栈中没有左括号,说明我们将字符串 s原创 2021-05-26 19:17:42 · 49 阅读 · 0 评论 -
【006】LeetCode155 最小栈
题目155. 最小栈6.1 官方解析点击这里方法一:辅助栈思路要做出这道题目,首先要理解栈结构先进后出的性质。对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。因此,在操作过程中的任意一个时刻,只要栈顶的元素是 a,那么我们就可以确定栈里面现在的元素一定是 a, b, c, d。那么,我们可以在每个元素 a 入栈时把当前栈的最小值 m原创 2021-05-25 22:13:18 · 275 阅读 · 0 评论 -
【005】LeetCode 232用栈实现队列
题目232. 用栈实现队列5.1 官方解析点击这里方法一:双栈思路将一个栈当作输入栈,用于压入 push 传入的数据;另一个栈当作输出栈,用于 pop 和 peek 操作。每次 pop 或 peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。class MyQueue {private: stack<int> inStack, outStack; void in2out() {原创 2021-05-25 17:06:50 · 102 阅读 · 0 评论 -
【004】LeetCode769最多能完成排序的块
题目769. 最多能完成排序的块4.1 官方解析点击这里方法一: 暴力思路和算法首先找到从左块开始最小块的大小。如果前 k 个元素为 [0, 1, …, k-1],可以直接把他们分为一个块。当我们需要检查 [0, 1, …, n-1] 中前 k+1 个元素是不是 [0, 1, …, k] 的时候,只需要检查其中最大的数是不是 k 就可以了。(写的不清楚,还是看下面的解析)4.2 解法1(评论区看了一下,比较方便的都是这种解法,跟官方解析差不多~)对数组从左往右遍历,同时记录当前的最大值,每原创 2021-05-25 17:04:56 · 111 阅读 · 0 评论 -
【003】LeetCode 240搜索二维矩阵 II
题目240. 搜索二维矩阵 II3.1 官方解析点击这里方法1:暴力法方法二:二分法搜索方法三:搜索空间的缩减方法四:因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)或O(n)元素。3.2 解法1通过观察发现:从左下角开始查找,若当前值小于待搜索值,我们向右移动一位;若当前值大于待搜索值,我们向上移动一位。如果最终移动到右上角仍不等于待搜索值,则说明待搜索值不存在于矩阵中。class Solution {public: bool s原创 2021-05-24 22:19:19 · 101 阅读 · 0 评论 -
【002】LeetCode 48旋转图像
2. 题目48. 旋转图像2.1 官方解析讲的太复杂了,还是看下面的解析吧!原链接2.2 解法1(这道题自己的思路很清晰,但是在数组下标的确定上总是搞错!折腾了两个小时,真的是服了自己~)直接交换当时自己在做这道题的时候,一直困惑于下标的对应!一定要注意下标!!!画个图,根据图上的坐标进行对应会容易很多,否则必定乱!class Solution {public: void rotate(vector<vector<int>>& matrix) {原创 2021-05-24 17:45:04 · 122 阅读 · 0 评论 -
【001】LeetCode 448找到所有数组中消失的数字
1. 题目448 找到所有数组中消失的数字1.1 官方解析方法一:原地修改可以用一个哈希表记录数组 nums 中的数字,由于数字范围均在[1, n]中,记录数字后我们再利用哈希表检查[1,n]中的每一个数是否出现,从而找到缺失的数字。由于数字范围均在 [1, n]中,我们也可以用一个长度为 n 的数组来代替哈希表。这一做法的空间复杂度是 O(n) 的。我们的目标是优化空间复杂度到 O(1)。注意到 nums 的长度恰好也为 n,能否让nums充当哈希表呢?由于nums 的数字范围均在[1, n]原创 2021-05-23 22:26:09 · 57 阅读 · 0 评论