![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣题解
文章平均质量分 54
超可爱的edith
超可爱的!
展开
-
[力扣]42.接雨水(单调栈)
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例二:输入:height = [4,2,0,3,2,5]输出:9思路显然可以利用单调栈的思路解题。单调栈的含义就是维护一个单调递减的栈,具体来原创 2021-05-03 16:02:02 · 138 阅读 · 2 评论 -
[力扣]236.二叉树的最近公共祖先(后序遍历,递归)
题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。输入:root = [3,5,1,6,2,0,8,null,nul原创 2021-04-27 16:32:44 · 452 阅读 · 3 评论 -
[力扣系列]191.位1的个数,图文详解c++位运算(超好懂!)
文章目录题目样例思路一:按位比较代码复杂度分析思路二:不断去掉最低位的1代码复杂度分析知识点:位运算题目编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。样例思路一:按位比较最简单的想法就是十进制转二进制,遍历一次统计 1 的个数。按照这个思路再细化一下就是用 1 分别和 n 在二进制下的每一位作与运算(&),若结果为 1 ,说明 n 的这个数位为 1 ,否则为 0 .核心代码为:sum += n & 1原创 2021-03-23 17:19:36 · 431 阅读 · 8 评论 -
[力扣系列]19.删除链表的倒数第N个节点,五分钟写完快慢指针(图解+代码)
文章目录题目思路图解:小技巧代码复杂度分析这道题可以说是面试中的经典老题,也是学习链表这种数据结构时绕不过的一道坎。今天我们一起来看看如何用快慢指针的思路解决这道题。题目使用一趟扫描实现删除链表中的倒数第n个数。思路快指针 p 在链表上遍历 n 个数后停下快、慢指针 p、q 同步后移直到 快指针 p 走到了链表末尾 (p->next = null),此时慢指针指向的就是倒数第 n+1 个数,执行删除操作 (q->next =q->next->next) 即可。原创 2021-03-17 14:27:36 · 134 阅读 · 6 评论 -
[力扣系列]54.螺旋矩阵(图解+代码,超好懂!)
思路采用模拟法,用数组d存储四个方向的前进步数,用二维布尔数组标志“来过”。若发现沿当前方向前进的下一个格子“来过”,就按顺时针转到下一方向继续前进。结束条件:走过的格子数==总格子数小技巧在标志数组的周围预先画上一圈“墙”,这样就不用担心边界溢出啦!就像这样????代码class Solution {private: int nx, ny, n, d[4][2] = { {0,1},{1,0},{0,-1},{-1,0} }, dir = 0; bool map[12][12原创 2021-03-15 22:44:59 · 2946 阅读 · 14 评论 -
[力扣系列]227.基本计算器Ⅱ解析(c++)
文章目录解法一:双栈代码运行效率思路解析复杂度分析一个更好的解法:栈思路[^1]复杂度分析解法一:双栈代码class Solution {public: int calculate(string s) { vector<int> nums; vector<char> ops; int tmp; if(s[0]=='-'|| s[0] == '+')nums.push_back(0); for (int i = 0; i < s.length();原创 2021-03-11 20:44:40 · 210 阅读 · 2 评论 -
[力扣系列]327.区间和的个数
文章目录代码题解代码class Solution {public: int countRangeSum(vector<int>& nums, int lower, int upper) { vector<long> sum(1, 0); // sum[i]的值是从A[0]+...+A[i]的和 int N = nums.size(); for (int i = 0; i < N; i++) { sum.push_back(sum.back()原创 2021-03-10 11:48:03 · 143 阅读 · 1 评论 -
[力扣系列]1047.删除重复项的两种解法
代码解法一:用栈(c++超时,java不超) for(auto c:S){ if(st.empty()){ st.push(c); } else { if(st.top()==c){st.pop();} else {st.push(c);} } }解法二:字符数组模拟栈(空间复杂度原创 2021-03-09 20:31:15 · 104 阅读 · 2 评论 -
[力扣系列]133.克隆图(c++代码+题解)
文章目录题目[^1]代码题解题目1给你无向 连通 图中一个节点的引用,请你返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])class Node {public int val;public List neighbors;}代码/*// Definition for a Node.class Node {public: int val; vector<Node*> neighbors;原创 2021-03-09 17:32:19 · 262 阅读 · 4 评论