
leetcode
摸鱼刷题找工作
ウルトラマン.
怕什么真理无穷,进一寸有一寸的欢喜
展开
-
leetcode题刷250天(103)——328. 奇偶链表
小跳蛙见过吧,一个站在奇数起点一个站在偶数起点,然后隔一个向后跳(p.next = p.next.next),跳完站稳之后(p = p.next)再往后隔着跳。原创 2022-09-08 14:51:53 · 402 阅读 · 0 评论 -
leetcode题刷250天(102)——14. 最长公共前缀( * 的解包)
直观来说就是把每个数据从左对齐然后一刀切,直到切到不同的时候就结束原创 2022-09-07 13:30:48 · 460 阅读 · 0 评论 -
leetcode题刷250天(101)——424. 替换后的最长重复字符(双指针)
用左右指针框住范围,进来的算最多字符的数量,看最多字符和范围是否满足小于等于K个字符的容忍范围,容忍:右指针右移,不容忍:左指针右移。原创 2022-09-02 16:41:39 · 319 阅读 · 0 评论 -
leetcode题刷250天(100)——438.字符串里的字母异构体(标记对比)
使用26长度的列表来标记当前窗口内出现字符的次数,进来加出去减。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。(笨蛋解法:滑动串口用set试试)原创 2022-09-02 15:43:07 · 148 阅读 · 0 评论 -
leetcode题刷250天(99)——946.验证栈序列(模拟栈)
先依次把入栈序列往栈里扔,如果当前栈顶的元素和出栈序列相同,那就把入栈的这个值弹出来,出栈序列指针向后走一下,如果栈顶元素无法对应当前出栈指针指向元素,那这次模拟的出栈序列就是不成立的。...原创 2022-08-31 23:08:46 · 123 阅读 · 0 评论 -
leetcode题刷250天(98)——733.图像渲染 and 200.岛屿数量(DFS)
深度递归,确定执行边界。原创 2022-08-30 15:43:53 · 143 阅读 · 0 评论 -
leetcode题刷250天(97)——739. 每日温度(单调栈)
把气温信息压入栈,若当前待进栈元素的气温大于栈顶气温 ,则栈顶元素气温对于升高的那一天就是待进栈元素,计算天数,弹栈。由此规划,栈内会形成一个底最大顶最小的单调递增栈。原创 2022-08-27 20:52:12 · 131 阅读 · 0 评论 -
leetcode题刷250天(96)——662. 二叉树最大宽度(BFS)
一棵完全二叉树可以按照一定的规则**连续**存储在数组中,其存储规则是从节点(i)开始,每个节点的左右孩子节点下标为(2*i)以及(2*i+1),按照此规则我们进行广度遍历,并以组合的形式存储节点的同时存储其位置信息,每遍历一层我们用最后一个节点位置减去第一个节点出现的位置,比较大小即可...原创 2022-08-27 09:41:10 · 107 阅读 · 0 评论 -
leetcode题刷250天(95)——121. 买卖股票的最佳时机(动态规划)
所以只需要从第一天开始,动态找出最小值,然后用后面的天数的钱减最小值获得最大收益,维护最大收益即可。原创 2022-08-26 16:40:47 · 171 阅读 · 0 评论 -
leetcode题刷250天(94)——658. 找到 K 个最接近的元素(双指针)
如果target的位置在中间,就要滑动双指针确定谁更靠近从而确定区间。如果target的位置在最左端或者最右端,那么前后截取K段即可。既然是有序列表中最靠近target的。那么首先要确定target的位置。原创 2022-08-25 10:30:14 · 137 阅读 · 0 评论 -
leetcode题刷250天(93)——二叉树相关(动态补充)
二叉树相关问题总结原创 2022-08-24 21:33:01 · 1045 阅读 · 0 评论 -
leetcode题刷250天(92)——链表相关(动态补充)
链表相关(动态补充)原创 2022-08-24 09:09:24 · 155 阅读 · 0 评论 -
leetcode题刷250天(91)——392. 判断子序列(双指针)
双指针原创 2022-08-23 11:40:34 · 117 阅读 · 0 评论 -
leetcode题刷250天(90)——205. 同构字符串(字符串)
字符串原创 2022-08-23 11:27:39 · 105 阅读 · 0 评论 -
leetcode题刷250天(89)——406. 根据身高重建队列(矮个子不影响高个子)
高个子的变动有可能会影响比他矮的人原创 2022-08-22 16:21:41 · 110 阅读 · 0 评论 -
leetcode题刷250天(88)——142. 环形链表 II(双指针)
环形链表原创 2022-08-21 16:24:45 · 132 阅读 · 0 评论 -
leetcode题刷250天(87)——654. 最大二叉树(DFS)
DFS原创 2022-08-20 22:00:04 · 122 阅读 · 0 评论 -
leetcode题刷250天(86)——1302.层数最深叶子节点的和(广度搜索)
暂无原创 2022-08-17 15:16:30 · 113 阅读 · 0 评论 -
leetcode题刷250天(85)——641. 设计循环双端队列(deque)
双端队列原创 2022-08-15 20:43:51 · 147 阅读 · 0 评论 -
leetcode题刷250天(84)——454. 四数相加 II(加法分配律)
任意两组的组合与另外一组都为相反数,所以将四次幂拆分为二次幂解法。原创 2022-07-22 22:00:26 · 107 阅读 · 0 评论 -
leetcode题刷250天(83)——729. 我的日程安排表 I(左右边界判断)
日程可以用一对整数start和end表示,这里的时间是半开区间,即[start,end),实数x的范围为,start原创 2022-07-19 16:53:31 · 67 阅读 · 0 评论 -
leetcode题刷250天(82)——275. H 指数 II (双指针)
从定义下手,将数据从大到小排序,只要数据非零,则一定存在第一个值使得H为1,自增H看第二大的值是否大于2,以此类推即可。原创 2022-07-18 09:29:59 · 98 阅读 · 0 评论 -
leetcode题刷250天(81)——565. 数组嵌套(环)
解题思路就是把每一个元素作为起点,访问过后标记置(-1)操作原创 2022-07-17 09:44:53 · 110 阅读 · 0 评论 -
leetcode题刷250天(80)——659. 分割数组为连续子序列(for-else)
for - else:python自带的一种特殊语法当for循环正常结束时会进入到else语句块中执行代码,如果for循环是因为执行了break语句导致提前结束的,则不会进入到else语句块原创 2022-06-03 09:57:09 · 795 阅读 · 0 评论 -
leetcode题刷250天(79)——792. 匹配子序列的单词数(内置函数yyds)
给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 。字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。解题思路:1 思路常规用二重循环即可,超时2 定位每个元素起始遍历位置,超时3 字典前缀树4 python内置函数find()class Solution(object): def numMatchingSubseq(self, s, words): re原创 2022-05-20 10:00:46 · 1053 阅读 · 0 评论 -
leetcode题刷250天(78)——436. 寻找右区间(二分查找)
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。解题思路:简单来说就是把所有区间的左侧端点值加入一个list,并且能够保存其顺序位次信息遍历所有的右原创 2022-05-20 09:06:37 · 118 阅读 · 0 评论 -
leetcode题刷250天(77)——462. 最少移动次数使数组元素相等 II(脑筋急转弯)
给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。在一步操作中,你可以使数组中的一个元素加 1 或者减 1 。解题思路:其实问题简单化, 假设有三个人在一条线上,AC在两端,B在中间若取中位数移动数就是C-A如果取平均值,B如果不是平均值,那么B需要走到平均值 且 AC走的路还是C-A 总移动数为C-A+ |avg-B|。。。人再多的时候,多的只是两边的人,中间的ABC已经站到指定位置了,思路同上class Solution(object): de原创 2022-05-19 09:10:46 · 87 阅读 · 0 评论 -
leetcode题刷250天(76)——第688题 乘法表中第k小的数(二分法)
给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。解题思路:假设我们要找的值为k,也就是说我们要找出所有不大于k的元素数量第 i 行 最大值是 当前行数乘以列数如果有值 x 出现 x/i >= col情况,说明当前行所有值都小于等于x,那么当前行小于等于x的数量为col如果有值 x 出现 x/i < col情况,说明当前行小于等于x的数量为 x//i我们可以统计当前值出现下 小于k的数据数目二分移动,最终找到正好符合 的数,那它就是第k原创 2022-05-18 09:33:09 · 280 阅读 · 0 评论 -
leetcode刷题250天(75)——953. 验证外星语词典(字典)
某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。解题思路:就是看当前的字符串是否满足字典序给定的比大小要求根据规则创建字典序即可class Solution: def isAlienSorted(self, words, order): # 用字典以键值原创 2022-05-17 10:24:12 · 101 阅读 · 0 评论 -
leetcode刷题250天(74)——面试题 04.06. 后继者(二叉搜索树)
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。.class Solution(object): def inorderSuccessor(self, root, p): result = root while root: # 当前结点值大于目标结点值 # 说明当前结点值应该在目标结点值遍历序列的后面 # 那就应原创 2022-05-16 09:07:30 · 139 阅读 · 0 评论 -
leetcode刷题250天(73)——1679. K 和数对的最大数目(双指针)
给你一个整数数组 nums 和一个整数 k 。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。解题思路:排序后找大的加小的符合要求,计数,移动指针class Solution(object): def maxOperations(self, nums, k): res = 0 nums.sort() left, right = 0, len(nums)-1原创 2022-05-15 09:15:28 · 115 阅读 · 0 评论 -
leetcode刷题250天(72)——1487. 保证文件名唯一(哈希表)
给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数解题思路:用字典保存当前是否遇到过此串 键为串 值为次数如果新加入的串键值大于等于1,则在其后拼凑(x)并再次与字典值对比,直到不存在时加入在此期间更新字典class Solut原创 2022-05-15 08:54:25 · 263 阅读 · 0 评论 -
leetcode刷题250天(71)——面试题 01.05. 一次编辑(镜像问题转换)
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。解题思路:1 长度差值 大于等于2 不符合要求2 长度差值 1 or 0比较两个串(1)两个串不等长 遇到不同的长的跳过(假定此处为待删除元素)并计数, 如果大于等于两处不同返回错误(2) 两个串等长 遇到对应位置不同元素 都跳过(假定此时为替换)并计数, 如果大于等于两处不同返回错误.class Solution: def oneEditAway原创 2022-05-13 09:16:42 · 99 阅读 · 0 评论 -
leetcode刷题250天(70)——449. 序列化和反序列化二叉搜索树(先序遍历||二叉搜索树)
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化 二叉搜索树 。对序列化/反序列化算法的工作方式没有限制。您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。解题思路:利用二叉搜索树根节点小于右子树 且 大于左子树特点 能够分类左右子树递归的进行,每次都能从左右子树构成的序列中解码当前子树根节点 左子树 右子树直到指针为空即可原创 2022-05-11 09:22:10 · 77 阅读 · 0 评论 -
leetcode刷题250天(69)——127. 单词接龙(BFS)
字典 wordList 中从单词 beginWord 和 endWord 的 转换序列是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk:1 每一对相邻的单词只差一个字母。2 对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。3 sk == endWord给你两个单词 beginWord 和 endWord 和一个字典 wordList原创 2022-05-09 09:05:00 · 126 阅读 · 0 评论 -
leetcode刷题250天(68)——433. 最小基因变化(BFS)
基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。例如,“AACCGGTT” --> “AACCGGTA” 就是一次基因变化。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找出并返回能够原创 2022-05-08 19:48:05 · 275 阅读 · 0 评论 -
leetcode刷题250天(67)——933. 最近的请求次数(双端队列)
题干及解题思路:简单来说就是将队列中以 最后输入值时间 向前推 T 时间谁在时间范围之外就 popclass RecentCounter(object): def __init__(self): # 创建一个队列 self.queue = collections.deque() def ping(self, t): # 将ping time压入 self.queue.append(t) # 计算原创 2022-05-06 09:31:22 · 211 阅读 · 0 评论 -
leetcode刷题250天(66)——713. 乘积小于 K 的子数组(滑动窗口)
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。解题思路:确定左边界 依次扩大右边界满足之下 右边界右探不满足之后 左边界左缩当前确定左边界下, 所有右边界之内值都符合条件class Solution(object): def numSubarrayProductLessThanK(self, nums, k): res, windowProduct = 0, 1 left ,right =原创 2022-05-05 10:21:47 · 200 阅读 · 0 评论 -
leetcode刷题250天(65)——1823. 找出游戏的获胜者(约瑟夫环问题)
解题思路:每次都可以计算出失败者的位置和下一轮开始人的位置不断删除、重新开始就能得到最后的获胜者class Solution: def findTheWinner(self, n: int, k: int) -> int: s, Q = 0, [i for i in range(1, n + 1)] while len(Q) > 1: #确定该轮失败者的位置 lost = (s + k - 1) %原创 2022-05-04 10:46:51 · 740 阅读 · 0 评论 -
leetcode刷题250天(64)——1305. 两棵二叉搜索树中的所有元素(dfs)
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序解题思路:最简单的方法就是先遍历再排序或者本身每棵树的中序遍历都是有序的,直接双指针滑动比较,存入新list也可以class Solution(object): def getAllElements(self, root1, root2): """ :type root1: TreeNode :type root2: Tree原创 2022-05-01 08:37:43 · 835 阅读 · 0 评论