力扣-leetcode算法题
文章平均质量分 71
记录自己觉得经典的算法题
Ma Sizhou
低级的欲望,放纵即可获得;高级的欲望,克制才能达到。
展开
-
leetcode(力扣)上如何自己构造二叉树输入用例?(python写法)
力扣上如何自己构造二叉树输入用例?原创 2021-12-23 18:39:40 · 5577 阅读 · 3 评论 -
leetcode笔记总结——(18)二叉树的前、中、后序遍历(python编写)
力扣地址:前序遍历.中序遍历.后序遍历.三种遍历的统一写法:1、思路:我们以中序遍历为例,因为使用栈的话,无法同时解决访问节点(遍历节点)和处理节点(将元素放进结果集)不一致的情况。那我们就将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记。如何标记呢,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。 这种方法也可以叫做标记法。2、代码:详细的思路在注释中。。。。。。(1)前序遍历:# Definition for a binary tree.原创 2021-10-26 20:27:32 · 185 阅读 · 0 评论 -
leetcode笔记总结——(17)求两个数组的交集(python编写)
力扣题目链接.目录1、题目描述:2、实现思路及代码:2.1 思路一:2.2 思路二:1、题目描述:2、实现思路及代码:2.1 思路一:使用集合:去重排序,然后位运算。(总感觉使用了人家写好的。。。)代码如下:class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: return list(set(nums1) & set(.原创 2021-10-09 21:51:23 · 193 阅读 · 0 评论 -
leetcode笔记总结——(16)环形链表(python编写)
力扣题目链接.目录1、题目描述:2、实现思路:2.1 方法一思路:2.1 方法二思路:3、代码描述(python):3.1 方法一的代码:3.1 方法二的代码:1、题目描述:2、实现思路:2.1 方法一思路:一个非常直观的思路是:我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判定链表中存在环。借助哈希表可以很方便地实现。(代码在下面)。2.1 方法二思路:快慢指针:第一步:判断链表是否有环。可以使用快慢指针法, 分别定义 fast 和.原创 2021-10-09 20:51:44 · 236 阅读 · 0 评论 -
leetcode笔记总结——(15)面试题:链表相交(python编写)
力扣题目链接目录1、题目描述:2、实现思路:3、代码描述(python):1、题目描述:2、实现思路:A长度为 a, B长度为b, 假设存在交叉点,此时 A到交叉点距离为 c, 而B到交叉点距离为d后续交叉后长度是一样的,那么就是 a-c = b-d ------> a+d = b+c。这里意味着只要分别让A和B额外多走一遍B和A,那么必然会走到交叉,注意这里边缘情况是,大家都走到null依然没交叉,那么正好返回null即可。上述的思路是:指向A的指针curA把A链表走完.原创 2021-10-08 20:51:00 · 142 阅读 · 0 评论 -
leetcode笔记总结——(14)螺旋数组(python编写)
力扣题目链接目录1、题目描述:2、实现思路:3、代码描述:1、题目描述:2、实现思路:直接模拟矩阵的生成。按照要求,初始位置设为矩阵的左上角,初始方向设为向右。若下一步的位置超出矩阵边界,或者是之前访问过的位置,则顺时针旋转,进入下一个方向。如此反复直至填入 n2n^2n2个元素。我是这么标记的:首先上、下、左、右,各标记一个变量,每循环一圈,左和上加一,而右和下则减一。注意边界:(1)当n=1时,单独判断;(2)n为奇数时,最中间的一个数要单独填充。3、代码描述:clas.原创 2021-09-27 22:05:56 · 242 阅读 · 0 评论 -
leetcode笔记总结——(13)递归实现 全排列(python编写)
目录1、题目描述:2、实现思路及代码描述:(1)思路:(2)代码:(3)总结:1、题目描述:2、实现思路及代码描述:(1)思路:(2)代码:nums = [i for i in range(1, 4)] # 要排列的数组[1,2,3]P = [0 for i in range(len(nums))] # P为当前排列hashtable = {x:False for x in nums} # 记录整数x是否已经在P中,初始都为False,表示都不在P中n = len(nums).原创 2021-08-18 16:33:11 · 106 阅读 · 0 评论 -
leetcode笔记总结——(12)优美全排列(python编写)
目录1、题目描述:2、思路及代码:2.1 方法一:回溯法(超时)(1)思路:(2)代码:1、题目描述:2、思路及代码:2.1 方法一:回溯法(超时)(1)思路:(2)代码:class Solution: def countArrangement(self, n: int) -> int: res = 0 # 保存结果 nums = [i for i in range(1, n+1)] def judge(nums):.原创 2021-08-18 11:45:33 · 295 阅读 · 0 评论 -
leetcode笔记总结——(11)两数之和 II - 输入有序数组(python编写)
目录:1、题目描述:2、实现思路及代码:2.1 方法一:二分查找法(1)思路:(2)代码:(3)总结:2.2 方法二:双指针(1)思路:(2)python代码:(3)总结:3、总结:1、题目描述:2、实现思路及代码:最简单的方法就是 暴力法:直接使用两个for循环,来查找两个数之和是否等于目标值,时间复杂度为O(N2)O(N^2)O(N2)。而暴力法没有用到有序数组这个条件,因此我们看看下面的做法:2.1 方法一:二分查找法(1)思路:在数组中找到两个数,使得它们的和等于目标值,可以首先原创 2021-07-22 19:01:42 · 299 阅读 · 1 评论 -
leetcode笔记总结——(10)买卖股票的最佳时机
目录1、第一题:买卖股票的最佳时机i:1.1 题目描述:1.2 实现思路:1.3 代码实现:2、第二题:买卖股票的最佳时机ii:2.1 题目描述:2.2 实现思路:2.3 代码实现:1、第一题:买卖股票的最佳时机i:1.1 题目描述:1.2 实现思路:维护一个单调递增栈。具体做法如下:1、遍历数组prices,如果栈顶元素小于当前遍历的元素,则当前元素直接入栈;如果栈顶元素大于当前遍历的元素,栈顶元素出栈,直到栈顶元素不大于当前遍历元素为止,这个时候当前元素才能入栈。2、栈顶元.原创 2021-07-05 20:19:03 · 297 阅读 · 1 评论 -
leetcode笔记总结——(9)去除重复字母 一类题目总结(python和C++描述)
目录1、第一题:移掉K位数字1.1 题目描述:1.2 实现思路:1.3 代码实现:(1)python代码:(2)C++代码:1.4 复杂度分析2、第二题:去除重复字母2.1 题目描述:这里类题目大概是这样的:给你一个字符串,让你去除一些字符,然后使得剩余的字符串的字典序最小(字典序最小,其实可以理解成ASCII值最小,比如ab就比ba小,因为从左到右比每一个字符,a的ASCII比b的小)。1、第一题:移掉K位数字1.1 题目描述:1.2 实现思路:题目要求我们删除k个数字,让剩余的 .原创 2021-05-18 00:36:59 · 741 阅读 · 8 评论 -
leetcode笔记总结——(8)三道题掌握 单调栈的使用(python和C++描述)
目录1、第一题:下一个更大元素I1.1 题目描述:1.2 方法一:暴力法(1)思路:(2)python代码:(3)C++代码:1.3 方法二:单调栈法(1)思路:(2)python代码:(3)C++代码:2、第二题:下一个更大元素II2.1 题目描述:2.2 方法一:暴力法(1)思路:(2)python代码:(3)C++代码:2.3 方法二:单调栈法(1)思路:(2)python代码:(3)C++代码:2.4 总结:3、第三题:每日温度3.1 题目描述:3.2 方法一:单调栈法(1)思路:(2)pyth..原创 2021-04-24 17:52:01 · 422 阅读 · 0 评论 -
leetcode笔记总结——(7)通过三道题,详细介绍递归和迭代方法实现二叉树的前、中、后序遍历(python3和C++实现)
二叉树的遍历方式是最基本,也是最重要的一类题目,我将从「前序」、「中序」、「后序」、三种遍历方式出发,总结他们的递归和迭代解法。关于层序遍历,我另外总结了一篇:leetcode笔记总结——(6)通过四道题,来掌握二叉树的层序遍历。(python3和C++实现).目录1、第一题:前序遍历1.1 题目描述:1.2 递归实现:(1)思路:(2)python代码:(3)C++代码:1.3 迭代实现:对于递归,实际上可以分为递和归,这里有个教程:数据结构与算法(Python版)——(3)递归可以很好的.原创 2021-04-24 23:45:39 · 653 阅读 · 2 评论 -
leetcode笔记总结——(6)通过四道题,来掌握二叉树的层序遍历。(python3和C++实现)
目录1、第一题:1.1 题目描述:1.2 思路:1.3 代码:(1)python代码:(2)C++代码:第二题:2.1 题目描述:2.2 思路:2.3 代码:(1)python代码:(2)C++代码:第三题:3.1 题目描述:3.2 思路:3.3 代码:(1)python代码:(2)C++代码:通过三道题,来掌握二叉树的层序遍历。说明一下,要对节点类和树类熟悉,这里有一个教程:https://blog.csdn.net/weixin_45901519/article/details/11522479.原创 2021-04-19 22:27:51 · 861 阅读 · 5 评论 -
leetcode笔记总结——(5)简化路径(python和C++实现)
1、题目描述:2、思路:首先根据’/'将path进行split,用res保存简化后需要的文件名,对于每个元素进行分类讨论:如果是 . 或者 空字符串 则跳过;如果是.. 说明需要返回上一级,即弹出一个文件名,但是这里有一个细节需要注意,只有res非空的时候才能弹出,否则对于测试用例 '/../'不能通过,因为此时的res为空;如果是普通的文件名,则加入res最后用’/‘连接起来,并且在首部加上’/'即可。3、代码实现:(1)python代码:由于python提供.split().原创 2021-04-16 23:13:13 · 376 阅读 · 0 评论 -
leetcode笔记总结——(4)删除有序数组中的重复项(python和C++实现)
目录1、题目描述2、思路3、代码实现(1)python代码:(2)C++代码:4、总结:1、题目描述2、思路使用双指针来求解。因为给定数组是有序的,所以相同元素必然连续。我们可以使用双指针解决本题,遍历数组检查每一个元素是否应该被保留,如果应该被保留,就将其移动到指定位置。具体地,我们定义两个指针 slow 和 fast 分别为慢指针和快指针,其中慢指针表示处理出的数组的长度,快指针表示已经检查过的数组的长度,即nums[fast] 表示待检查的第一个元素,nums[slow−1] 为上一个.原创 2021-04-06 22:10:02 · 298 阅读 · 0 评论 -
leetcode笔记总结——(3)字符串转换整数 (atoi)(python实现)
目录1、题目描述2、思路3、python代码实现4、运行结果:5、总结:(1)(2)Python 解包骚操作"*"(3)lstrip()1、题目描述2、思路我自己的思路就是使用多个if-else判断,虽然能解决,但是代码既难看又冗余,把自己的代码贴在下面,方便以后查看:class Solution: def myAtoi(self, s: str) -> int: if len(s) == 0: return 0 fl.原创 2021-03-18 22:17:52 · 281 阅读 · 0 评论 -
leetcode笔记总结——(2)Z 字形变换(python实现)
目录1、题目描述:2、思路:3、python代码实现:4、运行结果:5、总结:1、题目描述:2、思路:从示例1、2可以发现,这个Z字形中字符的行索引,是由原来字符串中的字符从0-numRows再到0的过程,所以有了这个规律之后,我们就能将每个字符放到对应的位置。我自己想到的是用二维列表存储的,实现有点笨拙,看了大佬的解法,感觉自己像个智障,下面我将大佬的解法记录下来,膜拜膜拜。下面是图形解释:3、python代码实现:class Solution: def.原创 2021-02-21 22:31:44 · 336 阅读 · 1 评论 -
leetcode笔记总结——(1)最长回文子串(python实现)
目录1、题目描述:2、思路:3、python代码实现:4、运行结果:5、总结:1、题目描述:2、思路:中心扩展法:从一个中心字符开始,向两边扩展,对比左右是否相同,相同则为子回文,否则不是,直到左右不相等,记下此时的左右下标,此时的子回文就是这个中心字符的最长子回文。将所有的中心字符遍历完,就能找到最长的子回文了。注意:当剩一个或者两个字符时,是不能扩展的,也就说一个或者两个字符时边界条件,需要分两种情况判断。3、python代码实现:class Solution: def ex.原创 2021-02-14 21:06:55 · 294 阅读 · 2 评论