leetcode
文章平均质量分 57
阿栗要努力
talk is cheap, show me the code
展开
-
快排 + 二分
一直觉得快排跟二分很像,大家也都有很多变种,在此整理一下 快排的特点是,需要一个pivort,让左边比他大,右边比他小(反之亦然),每次排序都有一个数的位置被确定 两种写法其实是一种 经典partition写在一个函数里 class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: def quicksort(start,end): idx = random.randi原创 2022-04-05 00:48:13 · 222 阅读 · 0 评论 -
【力扣十道】二叉树
刷题来劲了啊,让我们先膜一下神,就算不能去,也是很快乐的,刷完20道然后复习一下操作系统我就要去“地狱”了 100. 简单-相同的树 class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if not p and not q : return True elif not p or not q : return False原创 2021-08-23 20:37:21 · 158 阅读 · 0 评论 -
【力扣十道】双指针
双指针觉得写过很多次了嘛,但是没有笔记,可能=滑动窗口 要点就是快指针每次都走 慢指针看条件走 26. 删除有序数组中的重复项 80. 删除有序数组中的重复项 II 通解: class Solution: def removeDuplicates(self, nums: List[int]) -> int: n = len(nums) def sove(k): fast = slow = k while fast原创 2021-08-12 16:04:01 · 77 阅读 · 0 评论 -
【力扣十道】回溯
好久没写,仍然是模版方法 思路简述:递归调用 def backtrack(State,判断条件): if 满足什么条件就可以将State加入到res: res.append(S) return if 怎么怎么: backtrack(State,条件变化) res =[] backtrack(初始状态) return res 22. 括号生成 class Solution: def generateParenthesis(self, n: int) -> List[str]:原创 2021-08-04 18:56:59 · 102 阅读 · 0 评论 -
【力扣十道】dp动态规划
虽然树递归什么的我放弃了,很烦,但是来写dp了,就熬着呗,煎和熬都是变美味的方法 dp对我来说也是三步: 建dp数组初始化下标0的位置 !!!不要看全局,把自己放在j这个位置想当前的局部最大该怎么算 返回最大值 198. 中等-打家劫舍 213.中等-打家劫舍II 把环拆开,劫他们两次 哭哭不敢写树状dp,再写两道普通的再树状 62. 不同路径 你就想 你站在i,j的最多路径怎么算啊,不要想全局啊不要想全局 class Solution: def uniquePaths(self, m: int原创 2021-06-13 17:34:10 · 102 阅读 · 0 评论 -
【力扣十道】彻底解决滑动窗口
最近比较艰难啊,不足的地方好多,就当是打怪升级路漫漫了 我们统一思路都是: while里针对right作出改变 判断特殊条件是否满足,(如果窗口不固定在这步移动left) 每步right都要走,(如果固定窗口在这步移动left) 这样就可以做一个无情的代码机器(不用考虑滑动窗口现在的是框住的还是下一个的条件之类的,无脑刷就完事了) 类型一:滑动窗口固定 简单-643. 子数组最大平均数 I 求滑动窗口的最大平均数 中等-1423. 可获得的最大点数 说是从两边取最大,其实是求剩余最少,就是上一题求最大平原创 2021-06-12 20:56:25 · 283 阅读 · 0 评论 -
【力扣】常见又想不起来
快慢双指针 前缀和 https://leetcode-cn.com/problems/count-of-range-sum/solution/ class Solution: def countRangeSum(self, nums: List[int], lower: int, upper: int) -> int: res, pre, now = 0, [0], 0 for n in nums: now += n原创 2021-05-18 13:57:39 · 56 阅读 · 0 评论 -
[leetcode]经典二分查找+python快速二分查找
bisect 二分查找库 bisect二分查找库 import bisect data=[5,3,6,2,8] data.sort() data Out:[2, 3, 5, 6, 8] insort和bisect #查找该数值将会被插入的位置,并将其插入 bisect.insort(data,4) print(data) Out:[2, 3, 4, 5, 6, 8] #查找该数值将会被插入的位置并返回,但是并不将其插入 bisect.bisect(data,2) Out: 1 insort_le原创 2021-02-03 14:45:42 · 313 阅读 · 0 评论 -
【力扣】通俗易懂并查集·月整理
更复杂的并查集内容在https://zhuanlan.zhihu.com/p/93647900/ 我们只需要知道并查集能帮助我们做什么,和代码框架解读 一.并查集通俗理解 通俗来说就是用一个二维矩阵,起初大家都是孤立的 然后某个节点不断得进行势力扩张,合并其他节点,比如初始矩阵如下: [[0,1,2] [3,4,5] [6,7,8]] 然后进行merge 操作,比如merge(2,1),merge(2,4),merge(2,7),merge(2,8)那么矩阵变成 [[0,2,2] [3,2,5] [6,2,原创 2021-01-30 23:42:47 · 259 阅读 · 0 评论