LeetCode&牛客网刷题合集
文章平均质量分 51
LeetCode&牛客网刷题合集
向上的毛毛
这个作者很懒,什么都没留下…
展开
-
组合问题解析
组合问题原创 2022-08-22 00:12:15 · 401 阅读 · 0 评论 -
回溯算法总结
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。在回溯中,我们想象一个数组 [] 为路径,那么每次选择都是往路径中添加节点,因此,就要考虑每次节点的选项。解答:本题需要注意的是元素可以多次选择,那么在进入下次选择的时候,依旧可以选择当前元素,因为不可以包含重复的子集,所以之前走过的节点不可以再取了,因此我们在进入回溯的时候。可以视为路径中此刻的位置,类似于二叉树的当前层数。.........原创 2022-08-05 17:52:53 · 293 阅读 · 0 评论 -
【力扣】838. 推多米诺
推多米诺n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态,其中:原创 2022-02-21 21:45:05 · 122 阅读 · 0 评论 -
【力扣】373. 查找和最小的K对数字
373. 查找和最小的K对数字给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释: 返回序列中的前 3 对数: [1,2],[1,4原创 2022-01-14 15:00:25 · 210 阅读 · 0 评论 -
回溯算法分析
学习:回溯算法入门级详解 + 练习(持续更新)回溯算法可以大致想象成一棵树,根节点是一个空列表,然后以DFS深度搜索的形式从未访问集合中选择元素加入到列表中,当当前列表满足题目要求时,就将该路径视为一个答案,加入答案集中。在往前回溯的过程中要注意撤销当前选择,伪代码:for(int i = 0 ; i < n; i++{ // 每次都对整个集合进行遍历 if(visited[i]) continue; // 1.从未访问集合中选择一个元素加入列表,将该元素置为已访问 path.add(n原创 2022-01-13 20:06:34 · 349 阅读 · 0 评论 -
【力扣】306. 累加数
306. 累加数累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给你一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数 不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。示例 1:输入:"112358"输出:true 解释:累加序列原创 2022-01-10 14:35:16 · 140 阅读 · 0 评论 -
【力扣】71. 简化路径
71. 简化路径给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 ‘/’原创 2022-01-06 11:47:19 · 112 阅读 · 0 评论 -
【力扣】846. 一手顺子
846. 一手顺子Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为 [1,原创 2021-12-30 10:23:07 · 2936 阅读 · 0 评论 -
【力扣】1995. 统计特殊四元组
1995. 统计特殊四元组给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :nums[a] + nums[b] + nums[c] == nums[d] ,且a < b < c < d示例 1:输入:nums = [1,2,3,6]输出:1解释:满足要求的唯一一个四元组是 (0, 1, 2, 3) 因为 1 + 2 + 3 == 6 。示例 2:输入:nums = [3,3,6,4,5]输出原创 2021-12-29 12:06:23 · 2360 阅读 · 0 评论 -
【力扣】472. 连接词
472. 连接词给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串。示例 1:输入:words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"]输出:["catsdogcats","dogcatsdog","ratcatdogcat"]解释:"catsdog原创 2021-12-28 11:08:48 · 206 阅读 · 0 评论 -
【力扣】1609. 奇偶树
1609. 奇偶树如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。示例 1:输入:root = [1,10,4,3,null,7,9,12,8,6,null,n原创 2021-12-25 11:27:16 · 194 阅读 · 0 评论 -
【力扣】1705. 吃苹果的最大数目
1705. 吃苹果的最大数目有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n 天之后继续吃苹果。给你两个长度为 n 的整数数组 days 和 apples ,返原创 2021-12-24 12:24:26 · 3649 阅读 · 0 评论 -
【力扣】475. 供暖器
475. 供暖器冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。说明:所有供暖器都遵循你的半径标准,加热的半径也一样。示例 1:输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖原创 2021-12-20 12:23:57 · 105 阅读 · 0 评论 -
【力扣】419. 甲板上的战舰
419. 甲板上的战舰给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。示例 1:输入:board = [["X",".",".","X"],[".原创 2021-12-18 15:11:33 · 126 阅读 · 0 评论 -
【力扣】851. 喧闹和富有
851. 喧闹和富有题解有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness)。为了方便起见,我们将编号为 x 的人简称为 "person x "。给你一个数组 richer ,其中 richer[i] = [ai, bi] 表示 person ai 比 person bi 更有钱。另给你一个整数数组 quiet ,其中 quiet[i] 是 person i 的安静值。richer 中所给出的数据 逻辑自恰(也就是说,在 p原创 2021-12-15 17:06:04 · 102 阅读 · 0 评论 -
【力扣】372. 超级次方
题目你的任务是计算 aba^bab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入:a = 2, b = [3]输出:8示例 2:输入:a = 2, b = [1,0]输出:1024示例 3:输入:a = 1, b = [4,3,3,8,5,2]输出:1示例 4:输入:a = 2147483647, b = [2,0,0]输出:1198提示:1<=a<=231−11 <= a <= 2^{31}原创 2021-12-05 11:25:10 · 286 阅读 · 0 评论 -
【力扣】400. 第 N 位数字
400. 第 N 位数字给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位数字。示例 1:输入:n = 3输出:3示例 2:示例 1:输入:n = 11输出:0解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。提示:1<=n<=231−11 <= n <= 2^{31} -原创 2021-11-30 10:18:49 · 232 阅读 · 0 评论 -
【力扣】786. 第 K 个最小的素数分数
786. 第 K 个最小的素数分数给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。对于每对满足 0 < i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 answer[0] == arr[i] 且 answer[1] == arr[j] 。示例 1:输入:arr = [原创 2021-11-29 10:46:25 · 132 阅读 · 0 评论 -
【力扣】438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。示例 2:输入: s = "abab",原创 2021-11-28 11:06:45 · 141 阅读 · 0 评论 -
【力扣】423. 从英文中重建数字
题目给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。示例 1:输入:s = "owoztneoer"输出:"012"示例 2:输入:s = "fviefuro"输出:"45"提示:1<=s.length<=1051 <= s.length <= 10^51<=s.length<=105s[i] 为 [“e”,“g”,“f”,“i”,“h”,“o”,“n”,“s”,“r”,“u”,“t”,“原创 2021-11-24 11:30:40 · 93 阅读 · 0 评论 -
【力扣】384. 打乱数组
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果示例:输入["Solution", "shuffle", "reset", "shuffle"][[[1, 2, 3]], [], [], []]输出[null, [3, 1, 2], [1, 2原创 2021-11-22 10:37:28 · 91 阅读 · 0 评论 -
【力扣】563. 二叉树的坡度
563. 二叉树的坡度给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。题解方法一:双递归法/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNod原创 2021-11-18 10:14:57 · 414 阅读 · 0 评论 -
【剑指Offer】第 2 天 整数
剑指 Offer II 004. 只出现一次的数字给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,100]输出:100提示:1<=nums.length<=3∗1041 <= nums.length <= 3 * 10^41<=nums.length<=3∗10原创 2021-11-17 11:27:26 · 61 阅读 · 0 评论 -
【剑指Offer】318. 最大单词长度乘积
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "xtfn"。示例 2:输入: ["a","ab","abc","d","cd","bcd","abcd"]输出: 4 解.原创 2021-11-17 11:09:23 · 104 阅读 · 0 评论 -
【力扣】391. 完美矩形
391. 完美矩形给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。示例 1:输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]输出:true解释:5 个矩形一起可以精原创 2021-11-16 10:16:33 · 3701 阅读 · 0 评论 -
第 31 天 数学(困难)
剑指 Offer 14- II. 剪绳子 II给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m−1]k[0],k[1]...k[m - 1]k[0],k[1]...k[m−1]。请问k[0]∗k[1]∗...∗k[m−1]k[0]*k[1]*...*k[m - 1]k[0]∗k[1]∗...∗k[m−1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到原创 2021-11-15 11:35:34 · 777 阅读 · 0 评论 -
【剑指Offer】第 30 天 分治算法(困难)
剑指 Offer 17. 打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。题解class Solution { int[] res; int nine = 0, count = 0, start, n; char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; public int[]原创 2021-11-14 11:57:45 · 304 阅读 · 0 评论 -
【剑指Offer】第 27 天 栈与队列(困难)
剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6原创 2021-11-11 15:48:43 · 70 阅读 · 0 评论 -
【剑指Offer】第 26 天 字符串(中等)
剑指 Offer 20. 表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:1. 至少一位数字,后面跟着一个点 ‘.’2. 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字3. 一个点 ‘.’ ,后面跟着至少一位数字整原创 2021-11-10 12:32:36 · 81 阅读 · 0 评论 -
【力扣】第 24 天 数学(中等)
剑指 Offer 14- I. 剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题解尽可能将绳子以长度 3 等分为多段时,乘积最大。当 n≤3n \leq 3n≤3时,按照规则应不切分,但由于题目要求必须剪成 m>1 段原创 2021-11-08 11:25:20 · 3824 阅读 · 0 评论 -
【力扣】299. 猜数字游戏
299. 猜数字游戏你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”, 公牛),有多少位属于数字猜对了但是位置不对(称为 “Cows”, 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示原创 2021-11-08 10:21:24 · 96 阅读 · 0 评论 -
【剑指Offer】第 23 天 数学(简单)
剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。题解摩尔投票法class Solution { public int majorityElement(int[] nums) { int ans = 0, count = 0; for(int x : nums){ if(count == 0){ // 选择当前数为原创 2021-11-07 16:09:32 · 64 阅读 · 0 评论 -
2021-11-06
剑指 Offer 56 - II. 数组中数字出现的次数 II在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。题解统计32位上每一位出现1的次数,最后对3求余,找到只出现一次的数字。class Solution { public int singleNumber(int[] nums) { int[] counts = new int[32]; for(int num : nums) {原创 2021-11-06 11:46:39 · 60 阅读 · 0 评论 -
【剑指Offer】第 22 天 位运算(中等)
剑指 Offer 15. 二进制中1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。原创 2021-11-05 11:17:11 · 62 阅读 · 0 评论 -
【力扣】1218. 最长定差子序列
1218. 最长定差子序列给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。题解方法一:动态规划因为子序列可以删减原序列的元素,所以不能简单的一次遍历。在这里求等差子序列的长度,在遍历过程中,当前序列的结果与前面序列的结果相关,我们可以使用动态规划方法。但是,如果使用普通dp数组的原创 2021-11-05 10:36:17 · 144 阅读 · 0 评论 -
【剑指Offer】第 20 天 分治算法(中等)
剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }原创 2021-11-04 11:45:32 · 4261 阅读 · 0 评论 -
367. 有效的完全平方数
题目给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。题解二分法class Solution { public boolean isPerfectSquare(int num) { int low = 1, high = num; while(low <= high){ int mid = low + (hig原创 2021-11-04 10:55:03 · 73 阅读 · 0 评论 -
【剑指Offer】第 19 天 搜索与回溯算法(中等)
剑指 Offer 64. 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解利用逻辑运算符的短路效应class Solution { public int sumNums(int n) { // 前面判断n > 1,是为了使用逻辑运算符的短路效应 boolean flag = n > 1 && (n += sumNums(n - 1原创 2021-11-03 10:49:27 · 106 阅读 · 0 评论 -
2021-11-02
剑指 Offer 55 - II. 平衡二叉树输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;原创 2021-11-02 10:40:36 · 77 阅读 · 0 评论 -
【剑指Offer】第 17 天 排序(中等)
剑指 Offer 40. 最小的k个数添加链接描述输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。题解方法一:排序class Solution { public int[] getLeastNumbers(int[] arr, int k) { Arrays.sort(arr); int[] ans = new int[k]; for(int i = 0;原创 2021-11-01 11:38:06 · 74 阅读 · 0 评论