leetcode
TheJayChou
这个作者很懒,什么都没留下…
展开
-
LeetCode1851. 包含每个查询的最小区间(第239场周赛第四题)
// 并查集 + 离散化:// 将涉及的点映射到[0,n], 并查集中find(x)即x所在集合的祖先,表示[x, find(x)-1]已标记答案并删除,下一个未删除的点为find(x)// 区间按长度从小到大排序,从小到大枚举,包含在区间的点的答案即为此区间长度,因此在并查集中删除这些点(p[x] = x + 1)class Solution { int[] xs = new int[300010]; // 离散化后,第i个数对应的值 int[] p = new int[30001.原创 2021-05-06 16:09:14 · 270 阅读 · 1 评论 -
二进制枚举
class Solution { public int closestCost(int[] baseCosts, int[] toppingCosts, int target) { int ans = Integer.MAX_VALUE; int n = baseCosts.length, m = toppingCosts.length; for (int i = 0; i < n; i++) { int s = bas.原创 2021-02-28 16:03:39 · 134 阅读 · 1 评论 -
LeetCode 312. 戳气球 java
方法一:记忆化搜索class Solution { public int[][] rec; public int[] val; public int maxCoins(int[] nums) { int n = nums.length; val = new int[n + 2]; for (int i = 1; i <= n; i++) { val[i] = nums[i - 1]; .转载 2020-10-28 16:47:45 · 138 阅读 · 0 评论 -
LeetCode 347. 前 K 个高频元素
347. 前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意转载 2020-10-26 16:17:06 · 157 阅读 · 0 评论 -
LeetCode 301. 删除无效的括号
301. 删除无效的括号删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: “()())()”输出: ["()()()", “(())()”]示例 2:输入: “(a)())()”输出: ["(a)()()", “(a())()”]示例 3:输入: “)(”输出: [""]class Solution { private Set<String> validExpressions = n转载 2020-10-26 11:52:08 · 112 阅读 · 0 评论 -
LeetCode 297. 二叉树的序列化与反序列化 Java
297. 二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。/** * Definition for a binary tree node. * public class T原创 2020-10-20 15:20:45 · 226 阅读 · 2 评论 -
LeetCode 239. 滑动窗口最大值
239. 滑动窗口最大值动态规划:class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (n * k == 0) return new int[0]; // if (k == 1) return nums; int[] left = new int[n]; int[] right = ne转载 2020-10-13 10:31:29 · 94 阅读 · 0 评论 -
LeetCode 200. 岛屿数量 java 并查集
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘0’,‘0’],[‘0’,‘0’,‘0’,‘0’,‘0’]]输出: 1class Solution { class UnionFind {转载 2020-09-25 17:30:27 · 219 阅读 · 0 评论 -
LeetCode 128. 最长连续序列 java
128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。class Solution { public int longestConsecutive(int[] nums) { Set<Integer> num_set = new HashSet<Integer>(转载 2020-09-21 20:53:40 · 143 阅读 · 0 评论 -
LeetCode 126. 单词接龙 II python
126. 单词接龙 II给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。转换后得到的单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWor原创 2020-09-16 14:33:16 · 492 阅读 · 1 评论 -
LeetCode 124. 二叉树中的最大路径和
124. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入:[1,2,3] 1 / \ 2 3输出:6class Solution: def __init__(self): self.maxSum = float("-inf") def maxPathSum(self, root: TreeN转载 2020-09-12 17:11:06 · 111 阅读 · 0 评论 -
LeetCode 123. 买卖股票的最佳时机 III python
123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在原创 2020-09-12 10:33:18 · 293 阅读 · 2 评论 -
LeetCode 99. 恢复二叉搜索树 python
99. 恢复二叉搜索树二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:输入: [1,3,null,null,2]1/32输出: [3,1,null,null,2]3/12示例 2:输入: [3,1,4,null,null,2]3/ 1 4/2输出: [2,1,4,null,null,3]2/ 1 4/3方法一:显式中序遍历:# Definition for a binary tree node.# cl原创 2020-09-01 19:54:24 · 364 阅读 · 1 评论 -
LeetCode 87. 扰乱字符串 python
87. 扰乱字符串递归:class Solution: def isScramble(self, s1: str, s2: str) -> bool: if len(s1) != len(s2): return False if s1 == s2: return True if sorted(s1) != sorted(s2): return False转载 2020-08-28 11:27:42 · 207 阅读 · 0 评论 -
LeetCode 85. 最大矩形 python
85. 最大矩形给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6动态规划 - 使用柱状图的优化暴力方法:class Solution: def maximalRectangle(self, matrix: List[List[str]])转载 2020-08-27 15:47:01 · 545 阅读 · 0 评论 -
LeetCode 84. 柱状图中最大的矩形 python
84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10栈:from typing import Listclass Solution: def largestRect转载 2020-08-26 10:05:20 · 327 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串 python
76. 最小覆盖子串给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入:S = “ADOBECODEBANC”, T = “ABC”输出:“BANC”提示:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。题解滑动窗口的思想:用i,j表示滑动窗口的左边界和右边界,通过改变i,j来扩展和收缩滑动窗口,可以想象成一个窗口在字符串上游走,当转载 2020-08-19 10:11:51 · 375 阅读 · 0 评论 -
LeetCode 72. 编辑距离 python
72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “i原创 2020-08-17 20:15:52 · 245 阅读 · 1 评论 -
LeetCode 68. 文本左右对齐 python
68. 文本左右对齐给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的最后一行应为左对齐,且单词之间不插入额外的空格。说明:单词是指由非空格字符组成的字符序原创 2020-08-17 10:08:45 · 319 阅读 · 1 评论 -
LeetCode 65. 有效数字 Python
65. 有效数字验证给定的字符串是否可以解释为十进制数字。例如:“0” => true" 0.1 " => true“abc” => false“1 a” => false“2e10” => true" -90e3 " => true" 1e" => false“e3” => false" 6e-1" => true" 99e2.5 " => false“53.5e93” => true" --6 " =>转载 2020-08-13 17:42:31 · 275 阅读 · 0 评论 -
LeetCode 57. 插入区间 Python
57. 插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12原创 2020-08-12 20:21:34 · 304 阅读 · 1 评论 -
LeetCode 42. 接雨水 Python实现5种算法
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6动态规划(开始想到的)(O(n^2))class Solution: def trap(self, height: List[i原创 2020-08-04 15:21:30 · 1227 阅读 · 2 评论 -
LeetCode 41. 缺失的第一个正数
LeetCode 41. 缺失的第一个正数给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。class Solution: def firstMissingPositive(self, nums: List[int]) -> int:转载 2020-08-03 20:13:58 · 155 阅读 · 0 评论 -
LeetCode 37. 解数独
from collections import defaultdictclass Solution: def solveSudoku(self, board): """ :type board: List[List[str]] :rtype: void Do not return anything, modify board in-place instead. """ def could_place(d, row, .转载 2020-07-31 15:56:57 · 198 阅读 · 1 评论 -
LeetCode 32. 最长有效括号 Python实现三种算法
最长有效括号(困难)给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”动态规划(图片转自leetcode官解)class Solution: def longestValidParentheses(self, s: str) -> int: if len(s).原创 2020-07-30 12:47:02 · 868 阅读 · 1 评论 -
LeetCode 30. 串联所有单词的子串 Python实现O(n^2)和O(n)算法
30. 串联所有单词的子串(困难)给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入: s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出原创 2020-07-25 16:10:07 · 380 阅读 · 1 评论 -
刷LeetCode笔记,持续更新
目前用到的算法:递归,双指针,动态规划,回溯法,贪心算法,滚动哈希# 字符串转换整数 (atoi)class Solution: def myAtoi(self, str: str) -> int: return max(min(int(*re.findall('^[\+\-]?\d+', str.lstrip())), 2 ** 31 - 1), -2 ** 31)# re.findall(): 返回匹配的字符串列表,lstrip(): 删除字符串前面空格或其他字符。原创 2020-07-24 11:08:55 · 475 阅读 · 2 评论 -
LeetCode 25. K 个一组翻转链表 Python实现两种算法
25. K 个一组翻转链表(困难)给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只原创 2020-07-24 15:54:05 · 636 阅读 · 1 评论 -
LeetCode 28. 实现 strStr()
28. 实现 strStr()# 滚动哈希:常数时间生成哈希码class Solution: def strStr(self, haystack: str, needle: str) -> int: L, n = len(needle), len(haystack) if L > n: return -1 a = 26 modulus = 2 ** 31 h_t转载 2020-07-24 11:16:32 · 132 阅读 · 0 评论