Leetcode算法题解
Demo.demo
码海无涯,回头是家。
展开
-
Leetcode刷题笔记题解(C++):232. 用栈实现队列
/B栈用来pop 如果要获取队列的top,可以先把A栈元素依次弹出依次压入B栈中,然后B.top就是队列的top,pop也类似。//A栈用来push 可以利用A栈获取到队列的back即A.top。思路:双栈实现入队列和出队列的操作。//A+B栈来实现队列。原创 2024-03-04 21:44:58 · 244 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):92. 反转链表 II
思路:可以把需要反转的链表段拿出来进行反转,然后反转之后拼接进去。注意反转之后的头尾节点的拼接。原创 2024-02-29 22:25:01 · 262 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):6. Z 字形变换
到达0行的时候步进长度为+1;到达最后一行numRows-1行的时候步进长度为-1;思路:遍历时候需要更新步进长度。原创 2024-02-25 11:43:31 · 350 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):83. 删除排序链表中的重复元素
思路:链表相关的问题建议就是画图去解决,虽然理解起来很容易,但就是写代码写不出来有时候,依次去遍历第二节点如果与前一个节点相等则跳过,不相等则遍历第三个节点。原创 2024-02-20 21:48:03 · 383 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):203. 移除链表元素
思路:不同的情况出现了,就是第一个节点要是为等于val的节点,可以新建一个节点,并next指向head,这样就可以遍历新的链表来删除节点。原创 2024-02-20 22:08:53 · 419 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):120. 三角形最小路径和
思路:动态规划,去生成一个对应的当前节点的最小路径值,对应的关系如下所示。原创 2024-02-18 22:24:05 · 511 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):面试题 08.07. 无重复字符串的排列组合
再用第二个元素与后面每一个元素进行交换,生成。思路:因为字符之间互不相同,故使用全排列的方式去解题;,将第一个字母分别与后面每一个字母进行交换,生成。原创 2024-02-08 18:53:29 · 387 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):2266. 统计打字方案数
【代码】Leetcode刷题笔记题解(C++):2266. 统计打字方案数。原创 2024-02-07 21:22:18 · 181 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):64. 最小路径和
思路二:动态规划,记录每个节点的最小路径值,最后可得出最后一个节点的最小路径值。原创 2024-02-07 20:58:23 · 342 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):590. N 叉树的后序遍历
思路:类似于二叉树的排序,这里需要将子树进行依次递归遍历,前序遍历也与之类似。原创 2024-02-06 22:31:44 · 326 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):45. 跳跃游戏 II
【代码】Leetcode刷题笔记题解(C++):45. 跳跃游戏 II。原创 2024-02-05 21:37:14 · 152 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):257. 二叉树的所有路径
【代码】Leetcode刷题笔记题解(C++):257. 二叉树的所有路径。原创 2024-02-05 20:50:57 · 332 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1863. 找出所有子集的异或总和再求和
0 (选5) 5(不选5)思路如下:递归思路,依次遍历数组中的数,当前数要不要选择像二叉树一样去遍历如下图所示。原创 2024-02-04 22:05:52 · 373 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):36. 有效的数独
思路二:对思路1进行优化。原创 2024-02-03 22:21:04 · 312 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):99. 恢复二叉搜索树
二叉搜索树的中序遍历是递增序列,可以在中序遍历中记录两个需要交换的节点,直到遍历完毕之后,对两个节点的值进行交换即可得到正确的二叉搜索树。比如中序序列为 1 2 3 7 5 6 4(7比5大记录7为x,6比4大记录4为y,交换x与y)原创 2024-02-03 21:23:22 · 421 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1117. H2O 生成(多线程)
5.当生产者生成的氢元素填满缓冲队列时,生产者唤醒被阻塞的消费者;当消费者消费掉缓冲队列的元素后,消费者唤醒被阻塞的生产者。1.把 hydrogen 线程看作生产者,oxygen 线程看作消费者,缓冲队列大小为2。oxygen 线程每次从队列里消费两个氢元素。4.消费者只有当缓冲队列满时才会从缓冲队列中消费元素,缓冲队列未满时消费者阻塞。3.生产者生产两个氢元素后会因为缓冲队列满而阻塞,使用条件变量使生产者阻塞。6.由于不需要对队列中的氢元素做操作,我们只需维护缓冲队列的大小即可。原创 2024-01-28 21:03:49 · 269 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1116. 打印零与奇偶数(多线程)
互斥锁+条件判断奇偶。原创 2024-01-27 21:55:41 · 148 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1114. 按序打印(多线程)
A先占用资源1和资源2,A线程完了之后释放资源1不释放资源2,然后B线程占用资源1,A线程完了之后释放资源1和资源2,这时候 C线程可以占用资源2并进行。保证A,B,C三个线程的顺序不会变,即优先级顺序的问题。A,B需要资源1,B,C需要资源2。原创 2024-01-27 20:58:43 · 280 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1971. 寻找图中是否存在路径
3.遍历从起点开始能直接到达的点(即与起点相邻的点),判断那个点是否已经走过,并进入递归继续遍历与那个点相邻的点,直到抵达终点。1.建立图集,二维数组,path[0]里面存放的就是与0相连的节点集合。2.用布尔数组来记录当前节点是否被访问过,深度优先会使用到。原创 2024-01-26 21:33:00 · 323 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 153. 二叉树中和为目标值的路径
【代码】Leetcode刷题笔记题解(C++):LCR 153. 二叉树中和为目标值的路径。原创 2024-01-23 19:12:48 · 522 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):670. 最大交换
假设数字 9923676。从右边找最大的数字的下标maxindex,然后向左边寻找小于最大数字的数的下标,直到找到最左边,交换两者得出新的数字,比如从左到右递减的数字如9621则不需要变化,在寻找中记录这种数字。原创 2024-01-22 21:43:58 · 564 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 174. 寻找二叉搜索树中的目标节点
思路:二叉搜索树的中序遍历是有序的从大到小的,故得出中序遍历的结果,即要第cnt大的数为倒数第cnt的数。原创 2024-01-21 18:11:02 · 487 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 102. 目标和
思路:利用回溯去遍历,回溯结束条件为遍历到最后一个数字,如果符合target则目标数+1。原创 2024-01-21 11:10:22 · 514 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):200. 岛屿数量
思路:利用深度优先搜索的思路来查找1身边的1,并且遍历之后进行0替换防止重复dfs,代码如下所示。原创 2024-01-18 20:57:56 · 508 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):451. 根据字符出现频率排序
思想:利用map保存字符和出现的次数,然后遍历map得出出现次数从大到小的字符,并且按照出现次数来连接生成新的字符串。原创 2024-01-16 21:14:56 · 356 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 016.无重复字符的最长子串
利用滑动窗口的思想,用起始位置startindex和curlength来记录这个滑动窗口的大小,并且得出最长距离;原创 2024-01-06 12:06:46 · 455 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):224. 基本计算器
step 3:遇到左括号,则将括号后的部分送入递归,处理子问题;遇到右括号代表已经到了这个子问题的结尾,结束继续遍历字符串,将子问题的加法部分相加为一个数字,返回。step 4:当遇到符号的时候如果是+,得到的数字正常入栈,如果是-,则将其相反数入栈,如果是*,则将栈中内容弹出与后一个元素相乘再入栈。step 2:遍历字符串,遇到数字,则将连续的数字字符部分转化为int型数字。step 5:最后将栈中剩余的所有元素,进行一次全部相加。step 1:使用栈辅助处理优先级,默认符号为加号。原创 2023-12-17 22:55:58 · 612 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):328. 奇偶链表
思路:遍历链表生成奇链表和偶链表,然后拼接两个链表生成新的链表。原创 2023-12-13 22:13:08 · 528 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):25. K 个一组翻转链表
思路:利用栈的特性,K个节点压入栈中依次弹出组成新的链表,不够K个节点则保持不变。原创 2023-12-10 23:05:33 · 573 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 181. 字符串中的单词反转
思路:根据栈的原理先进后出,使用栈来依次保存每个单词,然后再依次从栈中取出每个单词。原创 2023-12-09 22:51:58 · 556 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 121. 寻找目标值 - 二维数组
思路:从左小角或者右上角开始遍历,假设右上角开始遍历,如果当前值大于目标值则列-1;如果当前值小于目标值则行+1,以此遍历来查找目标值;注意col和row的选取。原创 2023-12-07 22:05:18 · 580 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):165. 比较版本号
思路:利用小数点来分开求和,判断每个小数点隔开的和是否相等来推断两个版本号是否一致。原创 2023-12-07 21:56:55 · 465 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):BM11 链表相加(二)
思路:先对两个链表进行反转,反转求和注意进位运算,求和完成之后再进行反转得到结果。原创 2023-12-06 22:05:25 · 671 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):92. 反转链表 II
思路:获取要反转的区间,拆开之后进行反转再拼接。原创 2023-12-06 22:02:18 · 629 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):LCR 021. 删除链表的倒数第 N 个结点
思路:用双指针去遍历链表,删除left的下一个节点,注意的是n大于等于链表长度即删除第一个节点。原创 2023-12-05 22:51:49 · 560 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):1008. 前序遍历构造二叉搜索树
1.树中的第一个值为根(数组的第一个值),小于根的值存放在左子树中,大于根的值存放在右子树中;2.利用递归对左右子树。原创 2023-11-24 21:53:02 · 626 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):105. 从前序与中序遍历序列构造二叉树
前序遍历的第一个肯定是根节点,在中序遍历中根节点的左边是左子树, 右边是右子树,可以使用dfs搜索遍历查找左子树,先序遍历中第一个元素下一个开始到size_lefttree的长度作为左子树的前序遍历,剩下的作为右子树的前序遍历,中序遍历中根节点左边的作为左子树的中序遍历,右边的作为右子树的中序遍历代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo...原创 2020-09-18 09:22:08 · 343 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):106. 从中序与后序遍历序列构造二叉树
思路:后续遍历的最后一个节点肯定是父亲节点, 然后回到中序遍历中,父亲节点的左边是左子树的所有节点,右边是右子树的所有节点,然后左子树和右子树根据之前的再找父亲 节点即可代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x)..原创 2020-09-17 17:20:22 · 177 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):最长的“W”
说一下思路,从一个高峰值点开始的所有峰值点(高峰和低峰)记录为1,其他点为0然后 新生成一个数组记录每个1所在的小标,然后去求每5个1之间的距离即可, 然后取最大值代码如下:#include <iostream>#include <vector>using namespace std;int main() { int n; cin>>n; vector<int>nums(n); //用来保存每个点是否是..原创 2020-09-16 20:29:28 · 161 阅读 · 0 评论 -
Leetcode刷题笔记题解(C++):39. 组合总和
思路:此题的要求是每个数可以重复使用,那可以深度优先处理,分两种情况向下走1.当前元素要用2.当前元素不用,直接跳转至下一元素截止条件是: 数组中的元素都已经用过了且最后一个元素加入满足或者不满足为止用target的值来标定是否成立,加入一个元素,则target的值减去该元素的值,如果target=0的时候则满足输出结果中代码如下:class Solution {public: vector<vector<int>>res;//用于保存结果 ..原创 2020-09-15 21:09:15 · 177 阅读 · 0 评论