Leetcode
p0ther
这个作者很懒,什么都没留下…
展开
-
5883. 判断单词是否能放入填字游戏内
给你一个m x n的矩阵board,它代表一个填字游戏当前的状态。填字游戏格子中包含小写英文字母(已填入的单词),表示空格的' '和表示障碍格子的'#'。如果满足以下条件,那么我们可以 水平(从左到右 或者从右到左)或 竖直(从上到下 或者从下到上)填入一个单词:该单词不占据任何'#'对应的格子。每个字母对应的格子要么是' '(空格)要么与 board中已有字母 匹配。如果单词是 水平放置的,那么该单词左边和右边 相邻格子不能为' '或小写...原创 2021-09-27 20:47:46 · 172 阅读 · 0 评论 -
395. 至少有 K 个重复字符的最长子串
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串,要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。示例 1:输入:s = "aaabb", k = 3输出:3解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。提示:1 <= s.length <= 1041....原创 2021-03-01 23:04:15 · 116 阅读 · 0 评论 -
1052. 爱生气的书店老板
1052. 爱生气的书店老板难度中等158今天,书店老板有一家店打算试营业customers.length分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第i分钟生气,那么grumpy[i] = 1,否则grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续X分钟不生气,但...原创 2021-03-01 00:05:14 · 157 阅读 · 0 评论 -
石子游戏
877. 石子游戏亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子piles[i]。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回true,当李赢得比赛时返回false。示例:输入:[5,3,4,5]输出:true...原创 2021-02-21 15:25:28 · 233 阅读 · 0 评论 -
极大极小问题
1760. 袋子里最少数目的给你一个整数数组nums,其中nums[i]表示第i个袋子里球的数目。同时给你一个整数maxOperations。你可以进行如下操作至多maxOperations次:选择任意一个袋子,并将袋子里的球分到2 个新的袋子中,每个袋子里都有 正整数个球。比方说,一个袋子里有5个球,你可以把它们分到两个新袋子里,分别有 1个和 4个球,或者分别有 2个和 3个球。你的开销是单个袋子里球数目的 最大值,你想要 最小化开销。请你返...原创 2021-02-17 15:43:21 · 714 阅读 · 0 评论 -
1759. 统计同构子字符串的数目
给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。同构字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串。子字符串 是字符串中的一个连续字符序列。示例 1:输入:s = "abbcccaa"输出:13解释:同构子字符串如下所列:"a" 出现 3 次。"aa" 出现 1 次。"b" 出现 2 次。"bb" 出现 1 次。"c" 出现 3 次。"cc" 出现 2 ...原创 2021-02-16 11:35:35 · 142 阅读 · 0 评论 -
567. 字符串的排列
给定两个字符串s1和s2,写一个函数来判断 s2 是否包含 s1的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False1.看透本质,就是窗口内的字符相同即可无关顺序,滑动窗口2.很Python的写法class Solution: ...原创 2021-02-10 11:36:15 · 141 阅读 · 0 评论 -
992. K 个不同整数的子数组
给定一个正整数数组 A,如果 A的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有3个不同的整数:1,2,以及3。)返回A中好子数组的数目。示例 1:输入:A = [1,2,1,2,3], K = 2输出:7解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2]1.暴力,维护K<n的窗口,一...原创 2021-02-09 10:54:40 · 97 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \1 3示例 1:输入: [1,6,3,2,5]输出: false1.bst一个很通用的思想是递归,找到根节点后,将序列划分成左右,处理好左右再对左右进行递归class Solution: def verifyPostorder(s...原创 2021-02-08 21:59:17 · 184 阅读 · 0 评论 -
978. 最长湍流子数组
当 A的子数组A[i], A[i+1], ..., A[j]满足下列条件时,我们称其为湍流子数组:若i <= k < j,当 k为奇数时,A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若i <= k < j,当 k 为偶数时,A[k] > A[k+1],且当 k为奇数时,A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最...原创 2021-02-08 15:26:19 · 154 阅读 · 0 评论 -
665. 非递减数列
给你一个长度为n的整数数组,请你判断在 最多 改变1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的:对于数组中所有的i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。1.一边遍历一边修改数组class Solution: def checkPossi...原创 2021-02-07 11:23:05 · 126 阅读 · 0 评论 -
1423. 可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可获..原创 2021-02-06 12:41:55 · 96 阅读 · 0 评论 -
1733. 需要教语言的最少人数
在一个由m个用户组成的社交网络里,我们获取到一些用户之间的好友关系。两个用户之间可以相互沟通的条件是他们都掌握同一门语言。给你一个整数n,数组languages和数组friendships,它们的含义如下:总共有n种语言,编号从1 到n。languages[i]是第 i位用户掌握的语言集合。friendships[i] = [ui, vi]表示ui 和vi为好友关系。你可以选择 一门语言并教会一些用户,使...原创 2021-01-28 12:14:59 · 107 阅读 · 0 评论 -
1128. 等价多米诺骨牌对的数量
给你一个由一些多米诺骨牌组成的列表dominoes。如果其中某一张多米诺骨牌可以通过旋转 0度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b]和dominoes[j] = [c, d]等价的前提是a==c且b==d,或是a==d 且b==c。在0 <= i < j < dominoes.length的前提下,找出满足dominoes[i] 和dominoes[j]等价的骨牌对 (i,...原创 2021-01-26 10:23:49 · 102 阅读 · 0 评论 -
536. 从字符串生成二叉树
class Solution: def str2tree(self, s: str) -> TreeNode: i = 0 def build(): nonlocal i if i == len(s): return val = '' # 提取数字 while i < len(s) and (s[i]...原创 2021-01-21 11:02:49 · 201 阅读 · 0 评论 -
5243. 同积元组
给你一个由 不同 正整数组成的数组 nums ,请你返回满足a * b = c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素,且 a != b != c != d 。示例 1:输入:nums = [2,3,4,6]输出:8解释:存在 8 个满足题意的元组:(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)(3,4,2,6) , (3,4,2,6) , (3,4,6,2) , (4,3,..原创 2021-01-17 16:20:24 · 179 阅读 · 0 评论 -
1209. 删除字符串中的所有相邻重复项 II
1209. 删除字符串中的所有相邻重复项 II给你一个字符串s,「k 倍重复项删除操作」将会从 s中选择k个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对s重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。本题答案保证唯一。示例 1:输入:s = "abcd", k = 2输出:"abcd"解释:没有要删除的内容。1.相邻元素的操作,很明显的使用栈解决 ,值得注意的一个优化的点是可以做空...原创 2021-01-15 15:30:59 · 147 阅读 · 0 评论 -
1018. 可被 5 整除的二进制前缀
1018. 可被 5 整除的二进制前缀难度简单74给定由若干0和1组成的数组A。我们定义N_i:从A[0]到A[i]的第i个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表answer,只有当N_i可以被5整除时,答案answer[i]为true,否则为false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有...原创 2021-01-14 10:37:14 · 84 阅读 · 0 评论 -
各种dp混合专题
当 A的子数组A[i], A[i+1], ..., A[j]满足下列条件时,我们称其为湍流子数组:若i <= k < j,当 k为奇数时,A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若i <= k < j,当 k 为偶数时,A[k] > A[k+1],且当 k为奇数时,A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最大...原创 2021-01-13 16:49:05 · 130 阅读 · 0 评论 -
1717. 删除子字符串的最大得分
给你一个字符串s和两个整数x 和y。你可以执行下面两种操作任意次。删除子字符串"ab"并得到x分。比方说,从"cabxbae"删除 ab,得到"cxbae"。删除子字符串"ba"并得到y分。比方说,从"cabxbae"删除 ba,得到"cabxe"。请返回对 s字符串执行上面操作若干次能得到的最大得分。示例 1:输入:s = "cdbcbbaaabab", x = 4, y = 5输出:19解释:- 删除 "cdbcbbaaab...原创 2021-01-11 20:15:16 · 166 阅读 · 0 评论 -
61. 旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例2:输入: 0->1->2-&g...原创 2021-01-08 11:21:28 · 75 阅读 · 0 评论 -
图算法
399. 除法求值难度中等331给你一个变量对数组equations和一个实数值数组values作为已知条件,其中equations[i] = [Ai, Bi]和values[i]共同表示等式Ai/ Bi= values[i]。每个Ai或Bi是一个表示单个变量的字符串。另有一些以数组queries表示的问题,其中queries[j] = [Cj, Dj]表示第j个问题,请你根据已知条件找出Cj/ Dj= ?的结果作为答案。返回所有问题的...原创 2021-01-06 11:47:04 · 191 阅读 · 0 评论 -
1046. 最后一块石头的重量
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到 1,所以数...原创 2020-12-31 11:11:39 · 74 阅读 · 0 评论 -
142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环...原创 2020-12-30 13:43:48 · 75 阅读 · 0 评论 -
方正矩阵类题目
84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。class Solution: def largestRectangleArea(self, heights: List[int]) -> int: ''' 本质思路就是对一个元素i分别找到左和右.原创 2020-12-29 20:41:02 · 290 阅读 · 0 评论 -
1702. 修改后的最大二进制字符串
给你一个二进制字符串binary,它仅有0或者1组成。你可以使用下面的操作任意次对它进行修改:操作 1 :如果二进制串包含子字符串"00",你可以用"10"将其替换。比方说,"00010" -> "10010"操作 2 :如果二进制串包含子字符串"10",你可以用"01"将其替换。比方说,"00010" -> "00001"请你返回执行上述操作任意次以后能得到的 最大二进制字符串。如果二进制字符串 x对应的十进制数字大于二进制字符串 y对应的十...原创 2020-12-29 20:00:37 · 214 阅读 · 0 评论 -
1706. 球会落何处
用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,可以将球导向左侧或者右侧。将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。如果球恰好卡在两块挡板之间的 "V" 形图案,或者被一块挡导向到箱子的任意一侧边上,就会卡住。返回一个大小为 n .原创 2020-12-28 16:02:44 · 108 阅读 · 0 评论 -
5638. 吃苹果的最大数目
有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n 天之后继续吃苹果。给你两个长度为 n 的整数数组 days 和 apples ,返回你可以吃掉的苹果的最大.原创 2020-12-28 15:08:41 · 123 阅读 · 0 评论 -
23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = [...原创 2020-12-22 17:03:58 · 119 阅读 · 0 评论 -
103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9], [15,7]]1.普通bfs2.dfs是一个有意思的思路1.bfs略2.dfs# Definition for a binary tree n...原创 2020-12-22 11:59:58 · 90 阅读 · 0 评论 -
389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。字符串t由字符串s随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例 2:输入:s = "", t = "y"输出:"y"示例 3:输入:s = "a", t = "aa"输出:"a"示例 4:输入:s = "ae", t = "aea"输出:"a"1.hash o(n) o...原创 2020-12-18 11:02:05 · 128 阅读 · 0 评论 -
49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。1.排序+hash nklogk2.编码hash映射 nkclass Solution: def groupAnag...原创 2020-12-14 10:25:07 · 121 阅读 · 0 评论 -
1679. K 和数对的最大数目
给你一个整数数组 nums 和一个整数 k 。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。示例 1:输入:nums = [1,2,3,4], k = 5输出:2解释:开始时 nums = [1,2,3,4]:- 移出 1 和 4 ,之后 nums = [2,3]- 移出 2 和 3 ,之后 nums = []不再有和为 5 的数对,因此最多执行 2 次操作。1.排序+双指针2.hashclass Sol.原创 2020-12-12 23:46:18 · 148 阅读 · 0 评论 -
376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)...原创 2020-12-12 15:54:49 · 74 阅读 · 0 评论 -
649. Dota2 参议院
Dota2 的世界里有两个阵营:Radiant(天辉)和Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。给定一个字符串代表...原创 2020-12-12 15:25:53 · 211 阅读 · 0 评论 -
861. 翻转矩阵后的得分
有一个二维矩阵A 其中每个元素的值为0或1。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b111...原创 2020-12-09 19:57:25 · 76 阅读 · 0 评论 -
659. 分割数组为连续子序列
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度至少为 3 的子序列,其中每个子序列都由连续整数组成。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 33, 4, 5示例 2:输入: [1,2,3,3,4,4,5,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 3, ...原创 2020-12-09 12:20:41 · 87 阅读 · 0 评论 -
1641. 统计字典序元音字符串的数目
给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。示例 1:输入:n = 1输出:5解释:仅由元音组成的 5 个字典序字符串为 ["a","e","i","o","u"]1.dfs2.dp,找个时间思考一下class Solution: def countVow..原创 2020-11-07 15:23:21 · 181 阅读 · 0 评论 -
845. 数组中的最长山脉
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”: B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。...原创 2020-10-28 10:01:16 · 118 阅读 · 0 评论 -
5548. 最小体力消耗路径
你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。请你返回从左上角走到右.原创 2020-10-25 13:25:51 · 550 阅读 · 0 评论