![](https://img-blog.csdnimg.cn/20200725090045843.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode算法题
LeetCode每日一题
大风车滴呀滴溜溜地转
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
展开
-
LeetCode Algorithm 1620. 网络信号最好的坐标
思路:先根据坐标范围遍历整个第一象限,然后再遍历所有的信号塔,针对每一个点判断是否在信号塔的范围内,如果在的话,就累加上它的信号强度,然后再根据一个全局最大值判断就可以了。原创 2022-11-02 21:45:00 · 588 阅读 · 0 评论 -
LeetCode Algorithm 540. 有序数组中的单一元素
思路:相同的两个数异或等于0。/ 偶数与1进行异或结果为原来偶数加一后的奇数,奇数与1进行异或结果为原来的奇数减一后的偶数。算法:位运算 / 二分。原创 2022-11-01 20:15:00 · 558 阅读 · 0 评论 -
LeetCode Algorithm 1403. 非递增顺序的最小子序列
排个序,然后从后往前取,如果当前取得数之和大于剩下的数,则break。原创 2022-08-09 19:49:01 · 1561 阅读 · 0 评论 -
LeetCode Algorithm 1472. 设计浏览器历史记录
思路:这明明是一道栈的题目,不知道为啥LeetCode给标成了链表的题目。用来存储访问历史,另外一个也用来存储访问历史,什么是前进历史呢,就是当我们执行一次。操作时才能找到之前弹出的历史。可以利用两个栈来实现,一个栈。咳咳,开个玩笑,另外一个栈。栈的栈顶元素弹出,然后塞入。...原创 2022-08-09 19:34:49 · 1589 阅读 · 0 评论 -
LeetCode Algorithm 914. 卡牌分组
思路:统计所有牌的个数,找到最大公约数,如果最大公约数大于等于2,返回true,否则返回false。原创 2022-08-08 20:55:38 · 1171 阅读 · 0 评论 -
LeetCode Algorithm 1721. 交换链表中的节点
思路:可以用快慢指针进行定位,先找到正数第k个节点,然后找倒数第k个节点,之后就是节点交换的操作了。原创 2022-08-08 20:45:40 · 621 阅读 · 0 评论 -
LeetCode Algorithm 1374. 生成每种字符都是奇数个的字符串
思路直接看代码,非常好懂。原创 2022-08-01 19:10:24 · 443 阅读 · 0 评论 -
LeetCode Algorithm 328. 奇偶链表
思路话不多说,代码十分通俗易懂,好的代码都不需要注释。原创 2022-07-28 21:26:16 · 438 阅读 · 0 评论 -
LeetCode Algorithm 2326. 螺旋矩阵 IV
思路印象中好像刚开始学算法的时候就遇到过类似的题目,什么旋转打印矩阵之类的,跟这道题类似。原创 2022-07-27 19:41:58 · 423 阅读 · 0 评论 -
LeetCode Algorithm 138. 复制带随机指针的链表
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。原创 2022-07-19 23:15:00 · 348 阅读 · 0 评论 -
LeetCode Algorithm 147. 对链表进行插入排序
思路定义一个lastSorted指针指向最后一个排好序的节点,再定义一个cur指针指向当前正在进行判断的节点,如果最后一个排好序的节点值小于当前正在判断的节点值,那么lastSorted指针和cur指针后移即可,否则说明需要将当前节点往前插入,首先定义一个pre节点指向头节点,如果pre的下一个节点值大于cur的节点值,那么就要把cur插入到pre节点的后方即可。...原创 2022-07-18 19:45:00 · 492 阅读 · 0 评论 -
LeetCode Algorithm 382. 链表随机节点
题目链接:382. 链表随机节点水塘抽样算法证明:P(第i个节点的值成为最后被返回的值)=P(第i次随机选择的值=0)×P(第i+1次随机选择的值≠0)×⋯×P(第n次随机选择的值≠0)=1i×(1−1i+1)×⋯×(1−1n)=1i×ii+1×⋯×n−1n=1n\begin{array}{l} P( 第 i 个节点的值成为最后被返回的值) \\ =P( 第 i 次随机选择的值 =0) \times P( 第 i+1 次随机选择的值 \neq 0) \times \cdots原创 2022-07-11 14:36:08 · 369 阅读 · 1 评论 -
LeetCode Algorithm 1669. 合并两个链表
题目链接:1669. 合并两个链表原创 2022-07-07 14:45:13 · 490 阅读 · 1 评论 -
LeetCode Algorithm 2130. 链表最大孪生和
题目链接:2130. 链表最大孪生和原创 2022-07-06 15:36:30 · 272 阅读 · 0 评论 -
LeetCode Algorithm 2181. 合并零之间的节点
题目链接:2181. 合并零之间的节点原创 2022-07-05 14:18:03 · 416 阅读 · 2 评论 -
LeetCode Algorithm 86. 分隔链表
题目链接:86. 分隔链表原创 2022-06-29 19:39:18 · 251 阅读 · 1 评论 -
LeetCode Algorithm 24. 两两交换链表中的节点
题目链接:24. 两两交换链表中的节点原创 2022-06-26 10:34:10 · 357 阅读 · 1 评论 -
LeetCode Algorithm 剑指 Offer II 027. 回文链表
题目链接:剑指 Offer II 027. 回文链表当然,如果你觉得双指针比较麻烦的话,也可以遍历链表保存到数组中再判断是否为回文。原创 2022-06-23 12:20:15 · 231 阅读 · 0 评论 -
LeetCode Algorithm 剑指 Offer 52. 两个链表的第一个公共节点
题目链接:剑指 Offer 52. 两个链表的第一个公共节点原创 2022-06-22 11:26:17 · 279 阅读 · 1 评论 -
LeetCode Algorithm 剑指 Offer 24. 反转链表
题目链接:剑指 Offer 24. 反转链表原创 2022-06-21 10:30:42 · 225 阅读 · 1 评论 -
LeetCode Algorithm 剑指 Offer 22. 链表中倒数第k个节点
题目链接:剑指 Offer 22. 链表中倒数第k个节点原创 2022-06-20 10:22:20 · 257 阅读 · 1 评论 -
LeetCode Algorithm 剑指 Offer 18. 删除链表的节点
题目链接:剑指 Offer 18. 删除链表的节点原创 2022-06-19 12:59:09 · 261 阅读 · 1 评论 -
LeetCode Algorithm 21. 合并两个有序链表
LeetCode Algorithm 21. 合并两个有序链表原创 2022-06-18 11:00:36 · 205 阅读 · 2 评论 -
LeetCode Algorithm 997. 找到小镇的法官
LeetCode Algorithm 997. 找到小镇的法官原创 2022-06-11 09:14:18 · 191 阅读 · 2 评论 -
LeetCode LCP 07. 传递信息
LeetCode LCP 07. 传递信息原创 2022-06-10 08:35:11 · 142 阅读 · 2 评论 -
LeetCode Algorithm 1791. 找出星型图的中心节点
LeetCode Algorithm 1791. 找出星型图的中心节点原创 2022-06-09 10:15:28 · 219 阅读 · 1 评论 -
LeetCode Algorithm 995. K 连续位的最小翻转次数
LeetCode Algorithm 995. K 连续位的最小翻转次数原创 2022-06-06 07:49:16 · 185 阅读 · 1 评论 -
LeetCode Algorithm 2000. 反转单词前缀
LeetCode Algorithm 2000. 反转单词前缀原创 2022-06-05 11:04:46 · 197 阅读 · 1 评论 -
LeetCode Algorithm 797. 所有可能的路径
797. 所有可能的路径Ideas首先题目要求的所有可能的路径,所以这是一个搜索问题,要搜索所有的状态空间,所以应该用DFS。我们从0节点出发,深入探索所有可能的下一步路线,直到到达 n - 1 节点或者达到一个曾经已经访问过的节点。CodePythonfrom typing import Listfrom copy import deepcopyclass Solution: def allPathsSourceTarget(self, graph: List[List[int]])原创 2022-02-28 20:37:10 · 247 阅读 · 0 评论 -
LeetCode Algorithm 746. 使用最小花费爬楼梯
746. 使用最小花费爬楼梯Ideas首先确定题目类型,爬楼梯问题,并且给定了状态转移的限制,其实就已经可以确定状态转移方程了。然后题目说可以从下标为0或下标为1的台阶开始爬,所以我们可以定义两个变量:first, second,分别表示从0台阶和1台阶开始爬的花费,然后依次向上更新,模拟爬楼梯的过程。CodePythonclass Solution: def minCostClimbingStairs(self, cost: List[int]) -> int:原创 2022-02-23 09:07:15 · 415 阅读 · 0 评论 -
LeetCode Algorithm 119. 杨辉三角 II
119. 杨辉三角 IIIdeasemmmm,按照杨辉三角的定义生成就好咯。首先杨辉三角是一个二维结构,所以肯定需要通过两层循环来生成。对于外层循环很简单的,我们要生成numRows行,那么直接循环numRows次就可以了。对于内层循环,可以发现,杨辉三角的第n行有n个元素,而且头尾都是1,所以也很简单。对于第1行来说,我们可以直接在创建数组的时候预定义好,那么后面就可以直接按照统一的逻辑来,不用单独处理了。最后直接返回最后一个元素就ok啦。CodePythonclass Solutio原创 2022-02-21 08:24:16 · 7804 阅读 · 0 评论 -
LeetCode Algorithm 22. 括号生成
22. 括号生成Ideas这是一道动态规划的题目,关于动态规划的题目我们可以从n比较小的情况下开始逐步分析。当n=1时,["()"]当n=2时,["()()", “(())”]当n=3时,["()()()", “(()())”, “()(())”, “(())()”, “((()))”]什么意思呢?当n=1,也就是只有一对括号时,只有一种情况。当n=2时,其实是在只有一对括号的情况下添加一对括号,可以添加在左边,也就是"()()",可以直接在外面套一层括号,也就是"(())",添加到右边的情原创 2022-02-20 14:17:09 · 7975 阅读 · 0 评论 -
LeetCode Algorithm 1337. 矩阵中战斗力最弱的 K 行
1337. 矩阵中战斗力最弱的 K 行IdeasTop K 问题一般都是通过堆来解决,这道题要求的是最弱的 K 行,说明这是一个小根堆问题。题目中是根据军人的数量来衡量战斗力的,而军人的数量其实就是当前行的列表求和,所以我们可以将(当前行列表求和,行索引)构造一个小根堆,然后输出 Top K 就ok啦。CodePythonimport heapqfrom typing import Listclass Solution: def kWeakestRows(self, mat: L原创 2022-02-17 08:50:26 · 453 阅读 · 0 评论 -
LeetCode Algorithm 116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针Ideas通过示例图可以很明显的看出来,next指针指向每一层的下一个节点,所以肯定跟二叉树的层序遍历有关。然后,,,就没有然后了,层序遍历稍微改一下逻辑就可以了。CodePythonclass Solution: def connect(self, root: 'Optional[Node]') -> 'Optional[Node]': if not root: return root queue = deque([root原创 2022-02-10 20:56:47 · 327 阅读 · 0 评论 -
LeetCode Algorithm 590. N 叉树的后序遍历
590. N 叉树的后序遍历IdeasN叉树的后序遍历其实就是前序遍历翻转过来,所以我们可以用栈模拟递归得到前序遍历序列,然后翻转一下就OK了。CodePythonclass Solution: def postorder(self, root: 'Node') -> List[int]: if root is None: return [] stack, ans = [root], [] while stack: node = stack.pop()原创 2022-02-10 20:42:08 · 978 阅读 · 0 评论 -
LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层序遍历Ideas首先得理解二叉树的层序遍历,它类似于广度优先搜索,在当前层搜索的时候,遍历到的每一个节点都要把它的所有孩子节点都添加到队列中。然后我们要锯齿形遍历,可以定义一个order变量,如果为True表示从左往右遍历,如果为False表示从右往左遍历,每次遍历完取反。CodePythonfrom collections import dequefrom typing import List# Definition for a binary tree nod原创 2022-02-09 22:01:34 · 394 阅读 · 0 评论 -
LeetCode Algorithm 589. N 叉树的前序遍历
589. N 叉树的前序遍历Ideas二叉树的前序遍历模板,拿过来稍微一改就完事了。def preorderTraversalLoop(node): if not node: return stack = [node] # list 模拟 stack while stack: tmp = stack.pop() print(tmp.value, end=' ') if tmp.right:原创 2022-02-09 21:27:09 · 228 阅读 · 1 评论 -
LeetCode Algorithm 559. N 叉树的最大深度
559. N 叉树的最大深度Ideas树问题一般都是用递归解决,树的深度问题就是一个深度优先搜索问题,求当前节点的所有子树的深度然后加上1,就是以当前节点为根的树高度。CodePythonclass Solution: def maxDepth(self, root: 'Node') -> int: return max((self.maxDepth(child) for child in root.children), default=0) + 1 if root原创 2022-02-07 14:31:03 · 319 阅读 · 1 评论 -
LeetCode Algorithm LCP 44. 开幕式焰火
LCP 44. 开幕式焰火Ideas树类型的题目一般都需要用到递归,这道题相对来说比较简单,我们只需要遍历整棵树,然后把节点值记录到一个集合中,最后返回集合的长度就可以了。所以这道题的考点就是树的遍历,奉上我的二叉树前序遍历模板:递归版本: def preorderTraversalRecursion(node): if not node: return print(node.value, end=' ') # 递归序第一次到达 no原创 2022-02-05 13:20:24 · 505 阅读 · 0 评论 -
LeetCode Algorithm 572. 另一棵树的子树
572. 另一棵树的子树Ideas首先想到的就是递归判断两棵树的每一个节点是否相等,那么就需要将subRoot跟root的每一个节点构成的子树判断是否相同。递归判断相等的逻辑比较简单,首先当前两个节点值相等,然后递归判断左子树是否相等,再递归判断右子树是否相等。递归的终止条件,就是两棵树同时到达了叶子结点,并且都没有孩子节点,此时说明这两颗子树相等。再具体一点,我们首先要判断subRoot是不是root的子树,有三种情况:subRoot和root两棵树相等;subRoot是root的左子树;原创 2022-02-05 13:10:36 · 1075 阅读 · 0 评论