leetcode-困难
文章平均质量分 66
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
leetcode-060-排列序列
常见的做法是:代入一个具体的数值,认真调试。把候选数放在一个 有序列表 里,从左到右根据「剩下的数的阶乘数」确定每一位填谁,公式 k / (后面几位的阶乘数) 的值 恰好等于候选数组的下标;如果 k 小于等于这一个分支将要产生的叶子结点数,那说明所求的全排列一定在这一个分支将要产生的叶子结点里,需要递归求解。一句话题解:以下给出了两种方法,思路其实是一样的:通过 计算剩余数字个数的阶乘数,一位一位选出第 k 个排列的数位。由于这里考虑的是下标,第 k 个数,下标为 k - 1,一开始的时候,k--。原创 2023-07-02 19:40:32 · 577 阅读 · 0 评论 -
leetcode-052-n皇后2
回溯的具体做法是:依次在每一行放置一个皇后,每次新放置的皇后都不能和已经放置的皇后之间有攻击,即新放置的皇后不能和任何一个已经放置的皇后在同一列以及同一条斜线上。显然,每个皇后必须位于不同行和不同列,因此将 N 个皇后放置在 N×N 的棋盘上,一定是每一行有且仅有一个皇后,每一列有且仅有一个皇后,且任何两个皇后都不能在同一条斜线上。为了降低总时间复杂度,每次放置皇后时需要快速判断每个位置是否可以放置皇后,显然,最理想的情况是在 O(1) 的时间内判断该位置所在的列和两条斜线上是否已经有皇后。原创 2023-06-07 20:15:36 · 578 阅读 · 0 评论 -
leetcode-051-n皇后
我们可以先不考虑每一个皇后之间不能相互攻击的条件,如果要求每行只能放一个皇后,我们能否穷举出所有的放置方法?对于每一个格子进行计算分析能不能放置皇后,最后的代码实现会跳过这些格子,把皇后放在合法的位置上。具体的,在每一个位置放置皇后,然后调用 backtrack 函数,进入下一行进行穷举进行判断。因为我们是一行一行从上向下放置皇后,所以下方,左下方和右下方不会有皇后(还没放皇后)。因为我们的逻辑是每一行只放一个皇后,所以这个皇后的左边和右边不需要进行检查了。N 皇后问题也是一个暴力穷举的问题。原创 2023-05-31 23:14:03 · 429 阅读 · 0 评论 -
leetcode-037-解数独
尝试去填充数组,只要行,列, 还有 3*3 的方格内 出现已经被使用过的数字,我们就不填充,否则尝试填充。声明布尔数组,表明行列中某个数字是否被使用了, 被用过视为 true,没用过为 false。我们尝试填充,如果发现重复了,那么擦除重新进行新一轮的尝试,直到把整个数组填充完成。类似人的思考方式去尝试,行,列,还有 3*3 的方格内数字是 1~9 不能重复。数独首先行,列,还有 3*3 的方格内数字是 1~9 不能重复。如果填充失败,那么我们需要回溯。初始化布尔数组,表明哪些数字已经被使用过了。原创 2023-05-07 17:49:37 · 135 阅读 · 0 评论 -
leetcode-030-串联所有单词的子串
初始化 differ 时,出现在窗口中的单词,每出现一次,相应的值增加 1,出现在 words 中的单词,每出现一次,相应的值减少 1。窗口移动时,若出现 differ 中值不为 0 的键的数量为 0,则表示这个窗口中的单词频次和 words 中单词频次相同,窗口的左端点是一个待求的起始位置。不同的是第 438 题的元素是字母,而此题的元素是单词。然后进行回溯,对每个下标,进行dfs,碰到dict[index][i]为true的,wordsNum[i]--,如果回溯到wordsNum全为0,代表全部对应。原创 2023-05-06 22:40:59 · 113 阅读 · 0 评论 -
leetcode-025-k个一组翻转链表
特殊情况,当翻转部分长度不足 k 时,在定位 end 完成后,end==null,已经到达末尾,说明题目已完成,直接返回即可。初始需要两个变量 pre 和 end,pre 代表待翻转链表的前驱,end 代表待翻转链表的末尾。翻转链表,然后将三部分链表连接起来,然后重置 pre 和 end 指针,然后进入下一次循环。经过k此循环,end 到达末尾,记录待翻转链表的后继 next = end.next。需记录翻转链表前驱和后继,方便翻转完成后把已翻转部分和未翻转部分连接起来。解法1(成功,0ms,极快)原创 2023-05-05 22:58:18 · 88 阅读 · 0 评论 -
leetcode-85-最大矩形-java
题目及测试package pid085;/* 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*/import java.util.List;public class main {原创 2020-07-31 15:57:53 · 410 阅读 · 0 评论 -
leetcode-72-编辑距离-java
题目及测试package pid072;/*72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r原创 2020-07-30 11:50:56 · 263 阅读 · 0 评论 -
leetcode-32-最长有效括号-java
题目及测试package pid032;/* 32. 最长有效括号给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"*/public class main { public static void main(String[] args) { String [] t原创 2020-07-24 15:26:03 · 413 阅读 · 0 评论 -
leetcode-84-柱状图中最大的矩形-java
题目及测试package pid084;/*柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。https://leetcode-cn.com/problems/largest-rectangle-in-histogram/以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。原创 2020-07-15 15:57:03 · 297 阅读 · 0 评论 -
leetcode-218-天际线问题-java
题目及测试package pid218;/*天际线问题城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。Buildings Skyline Contourhttps://leetcode-cn.com/problems/the-skyline-problem/每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第原创 2020-07-14 16:00:29 · 771 阅读 · 0 评论 -
leetcode-42-接雨水-java
题目及测试package pid042;/*接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:https://leetcode-cn.com/problems/trapping-rain-water/输入: [0,1,0,2,1,0,1,3,2,1,2,1原创 2020-07-09 15:35:36 · 243 阅读 · 0 评论 -
leetcode-406-根据身高重建队列-java
题目及测试package pid406;/*Queue Reconstruction by Height假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7原创 2020-07-08 15:35:48 · 332 阅读 · 0 评论 -
leetcode-149-直线上最多的点数-java
题目及测试package pid149;/*直线上最多的点数给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o +------------->0 1 2 3 4示例 2:输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出: 4解释:^|| o| o原创 2020-07-07 16:09:18 · 275 阅读 · 0 评论 -
leetcode-179-最大数-java
题目及测试package pid179;/*最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。*/public class main { public static void main(String[] args) { int[][] testTable = {{99原创 2020-07-03 14:22:08 · 282 阅读 · 0 评论 -
leetcode-295-数据流的中位数-java
题目及测试package pid295;/* 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNu原创 2020-07-02 15:04:20 · 208 阅读 · 0 评论 -
leetcode-341-扁平化嵌套列表迭代器-java
题目及测试package pid341;/* 扁平化嵌套列表迭代器给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。 示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1原创 2020-07-01 11:32:09 · 275 阅读 · 0 评论 -
leetcode-312-戳气球-java
题目及测试package pid312;/*戳气球有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i...原创 2020-01-22 11:12:45 · 360 阅读 · 0 评论 -
leetcode-140-单词拆分 II-java
题目及测试package pid140;/*单词拆分 II给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDi...原创 2020-01-20 11:55:06 · 750 阅读 · 0 评论 -
leetcode-139-单词拆分-java
题目及测试package pid139;/*单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code...原创 2020-01-17 11:59:30 · 397 阅读 · 0 评论 -
leetcode-279-完全平方数-java
题目及测试package pid279;/* Perfect Squares给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9...原创 2020-01-16 11:37:54 · 369 阅读 · 0 评论 -
leetcode-309-最佳买卖股票时机含冷冻期-java
题目及测试package pid309;/* Best Time to Buy and Sell Stock with Cooldown给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 ...原创 2020-01-15 11:57:36 · 258 阅读 · 0 评论 -
leetcode-152-乘积最大子序列-java
题目及测试package pid152;/* 乘积最大子序列给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。}*/p...原创 2020-01-13 14:20:35 · 206 阅读 · 0 评论 -
leetcode-4-寻找两个有序数组的中位数-java
题目及测试package pid004;/*寻找两个有序数组的中位数给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 ...原创 2020-01-10 14:58:26 · 430 阅读 · 0 评论 -
leetcode-378-有序矩阵中第K小的元素-java
题目及测试package pid378;/* Kth Smallest Element in a Sorted Matrix给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, ...原创 2020-01-09 13:43:21 · 281 阅读 · 0 评论 -
leetcode-324-摆动排序 II-java
题目及测试package pid324;/* 摆动排序 II给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。示例 1:输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2:输入: num...原创 2020-01-07 14:27:30 · 698 阅读 · 0 评论 -
leetcode-10-正则表达式匹配-java
题目及测试package pid010;/*正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从...原创 2020-01-06 13:39:00 · 147 阅读 · 0 评论 -
leetcode-44-通配符匹配-java
题目及测试package pid044;/*通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字...原创 2020-01-03 10:07:13 · 576 阅读 · 0 评论 -
leetcode-301-删除无效的括号-java
题目及测试package pid301;/* Remove Invalid Parentheses删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()"...原创 2019-12-27 13:42:33 · 451 阅读 · 0 评论 -
leetcode-212-单词搜索 II-java
题目及测试package pid212;import java.util.List;/*单词搜索 II给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:...原创 2019-12-26 11:20:10 · 170 阅读 · 0 评论 -
leetcode-131-分割回文串-java
题目及测试package pid131;/* 分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]*/import java.util.List;public class main { public ...原创 2019-12-24 14:06:18 · 236 阅读 · 0 评论 -
leetcode-315-计算右侧小于当前元素的个数-java
题目及测试package pid315;/*计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的...原创 2019-12-19 15:01:55 · 635 阅读 · 0 评论 -
leetcode-329-矩阵中的最长递增路径-java
题目及测试package pid329;/*给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。示例 2...原创 2019-12-18 13:27:16 · 388 阅读 · 0 评论 -
leetcode-210-课程表 II-java
题目及测试package pid210;/* 课程表 II现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课...原创 2019-12-17 11:17:54 · 366 阅读 · 0 评论 -
leetcode-207-课程表-java
题目及测试package pid207;/* 课程表现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释: 总共有 2...原创 2019-12-16 14:36:38 · 248 阅读 · 0 评论 -
leetcode-547-朋友圈-java
题目及测试package pid547;/*Friend Circles班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 ...原创 2019-12-12 14:47:44 · 380 阅读 · 0 评论 -
leetcode-124-二叉树中的最大路径和-java
题目及测试package pid124;/*二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null...原创 2019-12-11 14:49:50 · 242 阅读 · 0 评论 -
leetcode-236-二叉树的最近公共祖先-java
题目及测试package pid236;/*二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,n...原创 2019-12-10 15:10:56 · 164 阅读 · 0 评论 -
leetcode-130-被围绕的区域-java
题目及测试package pid130;/* 被围绕的区域给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:...原创 2019-12-09 13:48:13 · 402 阅读 · 0 评论 -
leetcode-127-单词接龙-java
题目及测试package pid127;/* 单词接龙给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度...原创 2019-12-06 14:07:52 · 573 阅读 · 0 评论