
LeetCode刷题
文章平均质量分 85
为面试做准备
哎呦-_-不错
读书太少而想太多
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode—26.求前k大值与前k小值
文章目录引言1.求最小的k个数剑指 Offer 40. 最小的k个数2.求最大的k个数引言 这是一类面试中特别容易被问到的题目,这里采用两种方法二叉堆与快速排序。1.求最小的k个数剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。思路一:二叉堆思路:建立一个大顶堆,维持堆的大小为k,如果新入队后,堆的大小大于k,则与新入队元素与堆顶比较,将较大的数移除,这样就可以原创 2021-05-22 19:59:37 · 892 阅读 · 7 评论 -
leetcode—25.链表排序题目leetcode总结
文章目录21. 合并两个有序链表23. 合并K个升序链表148. 排序链表21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]代码实现:迭代# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=N原创 2021-05-16 12:39:27 · 228 阅读 · 0 评论 -
四则表达式求值—中缀表达式先转变成后缀表达式再求值python实现
文章目录1.中缀表达式转变成后缀表达式2.后缀表达式计算1.中缀表达式转变成后缀表达式参考python【栈】中缀表达式转后缀表达式思路:代码实现:# 中缀表达式转为后缀表达式def infixToPostfix(infixexpr): prec = {} # 定义一个字典,保存优先级 prec["*"] = 3 prec["/"] = 3 prec["+"] = 2 prec["-"] = 2 prec["("] = 1 opStack原创 2021-05-13 15:19:09 · 406 阅读 · 3 评论 -
leetcode—24.堆题目leetcode总结
文章目录一个中心1046. 最后一块石头的重量三个技巧295. 数据流的中位数1439. 有序矩阵中的第 k 个最小数组和264. 丑数 II871. 最低加油次数1642. 可以到达的最远建筑一个中心 堆的中心就是动态求极值,动态与极值缺一不可。1046. 最后一块石头的重量有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完原创 2021-05-07 18:05:23 · 820 阅读 · 0 评论 -
leetcode—23.二叉搜索树题目leetcode总结
文章目录基本操作类题目235. 二叉搜索树的最近公共祖先450. 删除二叉搜索树中的节点669. 修剪二叉搜索树700. 二叉搜索树中的搜索701. 二叉搜索树中的插入操作基于中序遍历类题目基本操作类题目235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:输原创 2021-05-04 21:44:39 · 742 阅读 · 0 评论 -
leetcode—22.二分查找题目leetcode总结
文章目录引言查找一个数寻找最左边的满足条件的值面试题 08.03. 魔术索引寻找最右边的满足条件的值寻找最左插入位置35. 搜索插入位置34. 在排序数组中查找元素的第一个和最后一个位置寻找最右插入位置的情况局部有序(先降后升或先升后降)33. 搜索旋转排序数组81. 搜索旋转排序数组 II面试题 10.03. 搜索旋转数组153. 寻找旋转排序数组中的最小值二维数组的二分查找74. 搜索二维矩阵240. 搜索二维矩阵 II引言 二分查找的问题定义为:给定一个由数字组成的有序数组nums,并给你一原创 2021-05-04 21:44:05 · 1302 阅读 · 1 评论 -
leetcode—21.二叉树路径和相关题目leetcode总结
文章目录引言112. 路径总和113. 路径总和 II129. 求根节点到叶子节点数字之和124. 二叉树中的最大路径和257. 二叉树的所有路径引言 树的求和属于树的题目中比较常见的,因为可以有几种变体,灵活度比较高,也可以考察到对于树的数据结构和递归的理解。112. 路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示原创 2021-05-04 21:43:25 · 1124 阅读 · 0 评论 -
leetcode—20.二叉树构建相关题目leetcode总结
文章目录引言105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树889. 根据前序和后序遍历构造二叉树引言 这类题目本质还是用递归的手法来实现,但是这类题目有一个特点,就是它是构建一棵树,而不是给定一棵树,然后进行遍历,所以实现起来思路上有点逆向。实现思路是在递归中创建根节点,然后找到将元素劈成左右子树的方法,递归得到左右根节点,接上创建的根然后返回。105. 从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元原创 2021-04-28 22:45:17 · 174 阅读 · 0 评论 -
leetcode—19.二叉树遍历相关题目leetcode总结
文章目录引言一、深度优先遍历144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历二、广度优先遍历102. 二叉树的层序遍历103. 二叉树的锯齿形层序遍历引言 二叉树遍历即将二叉树按照某种顺序访问一遍,涉及深度优先遍历与广度优先遍历。深度优先遍历可分为前序遍历、中序遍历、后序遍历。广度优先遍历包括层次遍历,层序遍历可分为自顶向下层序遍历,自底向上层序遍历,锯齿层序遍历。一、深度优先遍历 一般都有递归与迭代思路,区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显原创 2021-04-28 20:28:06 · 428 阅读 · 0 评论 -
leetcode—18.二叉树性质相关题目leetcode总结
文章目录100. 相同的树101. 对称二叉树110. 平衡二叉树100. 相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例:输入:p = [1,2,3], q = [1,2,3]输出:true思路1:递归终止条件:p节点和q节点都为空或者两者之一为空,或者两者值不等。再次比较p节点和q节点的左孩子,以及比较p节点和q节点的右孩子# Definition for a bina原创 2021-04-27 17:22:54 · 305 阅读 · 7 评论 -
leetcode—17.递归题目python解答
文章目录70. 爬楼梯509. 斐波那契数面试题 08.06. 汉诺塔问题203. 移除链表元素70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路:不妨假设跳上n级台阶的跳法总数是f(n),我们无法直接得知f(n)和n的关系,也即无法直接给出函数f(n)的表达式。可以使用归纳推理法来推导关系f(1)=1 [1]f(2)=2[11,2]f(3)=3[111,12,21]f(原创 2021-04-25 23:28:14 · 708 阅读 · 0 评论 -
leetcode—16.两数相加链表python解答
文章目录2. 两数相加2. 两数相加给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807思路:我们可以将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补0,比如987+23 =987原创 2021-04-24 16:22:07 · 242 阅读 · 0 评论 -
leetcode—15.链表双指针题目python解答
文章目录引言19. 删除链表的倒数第 N 个结点引言 双指针指的是在循环遍历时采用两个指针进行扫描(指针方向可以是相同方向也可以是相反方向)。链表题目常用的相同方向的双指针即快慢指针,fast指针与slow指针从同一侧遍历,以不同的速度进行移动。19. 删除链表的倒数第 N 个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。使用一趟扫描实现示例:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]思路:我们可以设想假设设定了双原创 2021-04-24 15:54:55 · 525 阅读 · 2 评论 -
leetcode—14.链表反转类题目python解答
文章目录引言206. 反转链表92. 反转链表 II25. K 个一组翻转链表引言 反转类题目,可以通过迭代与递归来解决,这篇文章主要讲述迭代方法,递归方法会在后面介绍到。206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLclass Solution: def reverseList(self, head: ListNode) -&g原创 2021-04-23 23:15:16 · 378 阅读 · 0 评论 -
leetcode—13.链表基本操作类题目python解答
文章目录引言1.删除链表中的节点203. 移除链表元素237. 删除链表中的节点2.分隔链表86. 分隔链表3.交换链表24. 两两交换链表中的节点4.旋转链表61. 旋转链表143. 重排链表引言 链表基本操作类题目分为以下几种删除链表中的节点分隔链表交换链表旋转链表链表排序—这一部分内容在排序部分汇总1.删除链表中的节点203. 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点原创 2021-04-23 20:27:36 · 646 阅读 · 0 评论 -
牛客网—12.链表练习python解答
文章目录1.单向链表按值划分2. 在链表中删除倒数第k个节点3.向有序的环形单链表插入新节点1.单向链表按值划分题目描述:给定一个链表,再给定一个整数 pivot,请将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于 pivot 的节点, 右边部分都是大于 pivot 的节点。除此之外,对调整后的节点顺序没有更多要求。输入描述:第一行两个整数 n 和 pivot,n 表示链表的长度。第二行 n 个整数 ai 表示链表的节点。输出描述:请在给定的函数内返回链表的头原创 2021-04-22 22:06:06 · 376 阅读 · 0 评论 -
leetcode—11.队列题型python解答
文章目录125. 验证回文串232. 用栈实现队列239. 滑动窗口最大值125. 验证回文串 这里使用双端队列来解决回文串问题给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。class Solution: def isPalindrome(self, s: str) -> bool: s = s.lower() # 检测字母与数字字符 s = [i原创 2021-04-21 22:46:58 · 430 阅读 · 1 评论 -
leetcode—10.栈题型python解答
文章目录20. 有效的括号四则表达式求值程序员代码面试指南-设计一个有getMin功能的栈20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。这个题是括号匹配问题。栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。思路:从前向后扫描字符串:遇到左括号X,就压栈x遇到右括号y:如果发现栈顶元素x和该括号y匹配,则栈顶元素出栈,继续判断原创 2021-04-21 17:29:14 · 351 阅读 · 0 评论 -
leetcode—9.分离双指针题型python解答
文章目录分离双指针介绍350. 两个数组的交集 II349. 两个数组的交集分离双指针介绍 输入是两个数组/链表,两个指针分别在两个容器中移动;根据问题的不同,初始位置可能都在头部,或者都在尾部,或一头一尾。350. 两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。a.分离双指针class Solution: def intersect(self, nu原创 2021-04-20 20:15:57 · 329 阅读 · 0 评论 -
leetcode—8.同向双指针—滑动窗口题型python解答
文章目录引言1.固定窗口239. 滑动窗口最大值2.可变窗口209. 长度最小的子数组713. 乘积小于K的子数组引言 有些时候,我们需要获得数组或者字符串的连续子部分,这时候我们就可以考虑使用滑动窗口。nums[left,right]为滑动窗口,根据具体的要求,通过遍历的时候来改变 left和right 的位置,从而完成任务。滑动窗口主要处理连续问题,按类型主要有如下三种:固定窗口大小窗口大小不固定,求解最大的满足条件的窗口窗口大小不固定,求解最小的满足条件的窗口1.固定窗口对于原创 2021-04-20 17:43:05 · 348 阅读 · 0 评论 -
leetcode—7.同向双指针—快慢指针题型python解答
文章目录引言26. 删除有序数组中的重复项27. 移除元素27. 移除元素—进阶80. 删除有序数组中的重复项 II283. 移动零845. 数组中的最长山脉引言 下面的快慢指针的关键是划分一个slow区间,这部分正是我们所需要的26. 删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。class Solutio原创 2021-04-20 15:40:28 · 429 阅读 · 0 评论 -
Leetcode—6.相向双指针的剩余题型python解答
文章目录引言11. 盛最多水的容器611. 有效三角形的个数125.判断是否为回文字符串344. 反转字符串345. 反转字符串中的元音字母引言 上一节,我们介绍了Leetcode—5.n sum 问题python解答。这一部分我们尝试总结剩余可以用相向双指针解决的题型。11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们原创 2021-04-20 09:58:14 · 227 阅读 · 0 评论 -
Leetcode—5.n sum 问题python解答
文章目录1.两数之和—two sum1.11.两数之和—two sum给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。数组中同一个元素在答案里不能重复出现。这道题有三种解法:a.暴力解法class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: """ 暴力解法:时间复杂度为O(n原创 2021-04-19 21:52:06 · 1375 阅读 · 6 评论 -
LeetCode—4.滑动窗口
文章目录引言一、LeetCode—209引言 滑动窗口也是一种双指针(索引)的方式,顾名思义。使用双索引来表示一个滑动的窗口。一、LeetCode—209209.Minimum Size Subarray Sum 给定一个整型数组和一个数字s,找到数组中最短的一个连续子数组,使得连续子数组的数字和sum>=s,返回这个最短的连续子数组的长度值给定数组[2,3,1,2,4,3],s=7输出[4,3],返回2连续子数组如果没有解怎么办?返回0有多个解的话该怎么办?返回一个还是原创 2021-03-10 10:15:17 · 186 阅读 · 0 评论 -
LeetCode—3.双指针算法—对撞指针与快慢指针及其leetcode题
文章目录引言一、对撞指针二、快慢指针三、LeetCode—167其他用到对撞指针的问题四、LeetCode—142引言 双指针算法在数组问题中极为常用。双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。一、对撞指针 对撞指针法,顾名思义,就是指针在两边往中间撞。见三二、快慢指针 快慢指针可以理解为:一个跑的快的人和一个跑的慢的人在一个圆形的赛道上赛跑,在某个时刻,跑得快的人一定会从后面赶上跑得慢的人。快指针fast一次走两步,慢指针slow一次走一步,最终会相遇在环中的某个原创 2021-03-06 14:52:36 · 375 阅读 · 0 评论 -
LeetCode—2.堆排序算法
文章目录一、二叉堆二、堆的自我调整1.插入节点2.删除节点3.构建二叉堆三、堆的代码实现一、二叉堆 二叉堆本质上是一种完全二叉树,它分为两个类型:最大堆:最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。最小堆:最小堆任何一个父节点的值,都小于等于它左右孩子节点的值。 二叉堆的根节点叫做堆顶。最大堆和最小堆的特点决定了在最大堆的堆顶是整个堆中的最大元素;最小堆的堆顶是整个堆的最小元素。二、堆的自我调整1.插入节点 下面以最小堆为例,看看二叉堆是如何进行调整的?如图所示原创 2021-03-05 12:15:32 · 494 阅读 · 1 评论 -
LeetCode—1.快速排序算法
文章目录1.基本思想2.算法原理3.分区—partition1.挖坑法2.指针交换法4.怎么选取基准5.时间复杂度6.LeetCode1.基本思想 快速排序算法(Quick Sort)是冒泡算法的一种改进,是一种不稳定的排序算法。其主要思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据要比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终整个数据变成了有序序列。冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地原创 2021-03-03 13:08:59 · 562 阅读 · 0 评论