leetcode
starflyyy
这个作者很懒,什么都没留下…
展开
-
Leetcode: 200. 岛屿数量
题目给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出:1示例2:输入:[['1','1','0','0','...原创 2020-07-14 16:35:43 · 280 阅读 · 0 评论 -
Leetcode: 35. 搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0分析比较标准的二分查找题目。用二分查找的语言描述:找到第一个大于等于 target 所在的位置。.原创 2020-07-06 16:26:11 · 213 阅读 · 0 评论 -
Leetcode: 33. 搜索旋转排序数组
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例2:输入: nums = [4,5,6,7,0,1,2...原创 2020-07-06 15:50:12 · 154 阅读 · 0 评论 -
Leetcode: 215. 数组中的第 k 个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。分析该题目利用三路快速排序中的 partition 函数进行快速选择。首先看一下 partition 函数:private i.原创 2020-07-04 17:53:18 · 232 阅读 · 0 评论 -
Leetcode: 75. 颜色分类
题目给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常..原创 2020-07-04 11:45:32 · 164 阅读 · 0 评论 -
Leetcode: 1498. 满足条件的子序列数目
题目给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。示例 1:输入:nums = [3,5,6,7], target = 9输出:4解释:有 4 个子序列满足该条件。[3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)[3,5] -> (3 + 5原创 2020-06-30 11:05:33 · 656 阅读 · 0 评论 -
Leetcode: 1497. 检查数组对是否可以被 k 整除
题目给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n /2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:输入:arr = [1,2,3,4,5,6], k =.原创 2020-06-29 17:02:14 · 304 阅读 · 0 评论 -
Leetcode: 1496. 判断路径是否相交
题目给你一个字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。示例 1:输入:path = "NES"输出:false解释:该路径没有在任何位置相交。示例 2:输入:path = "NESWW".原创 2020-06-29 16:19:55 · 366 阅读 · 0 评论 -
Leetcode: 47. 全排列II
题目给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]分析该题目和全排列I的差别在于:本题目可以包含重复的数字,并且要求返回所有不重复的全排列。按照常规的思路,我们画出深度优先搜索树,并确定路径和可选列表。如 nums = [1, 2, 2], 它的深度优先搜索树如下:最关键的是去重操作:for (int i = 0; i < candidate...原创 2020-06-27 15:53:43 · 113 阅读 · 0 评论 -
Leetcode: 90. 子集II
题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]分析与子集I的区别在于 nums 包含了重复的元素。那么只需要先将 nums 进行排序(将重复的值集中到一起),然后再填加额外一行代码去重就可以了。如上图,nums = [1, 2, 2], 为两个2加标记,用于区分。...原创 2020-06-27 10:50:19 · 143 阅读 · 0 评论 -
Leetcode: 78. 子集I
题目给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]分析子集是回溯法的另一类经典题目,解决方法还是画出深度优先搜索树,找到路径和可选列表,与全排列不同的点有两个:一是集合是无序的,二是树中每一个结点都应该直接加入答案集。可以发现,在同一...原创 2020-06-27 09:29:48 · 175 阅读 · 0 评论 -
Leetcode: 46. 全排列I
题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]分析这是回溯法中全排列题型中最基本的一道题,画出深度优先搜索树,然后找到路径和可选列表。只要使用代码将上图模拟出来即可。代码class Solution { public List<List<Integer>>...原创 2020-06-26 17:25:35 · 157 阅读 · 0 评论 -
Leetcode 刷题模板总结
回溯法:回溯法是一种特殊的深度优先搜索算法(DFS), 做该类题目的要点在于画出深度优先搜索树,然后确定相应的路径和可选列表。模板:List<.> res = new ArrayList<>();public void backtrack(路径, 可选列表) { if (满足结束条件) { 加入 res; return; } for (选择 : 选择列表) { 做出选择; back原创 2020-06-26 16:53:54 · 971 阅读 · 0 评论 -
Leetcode 22: 括号生成
题目数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]分析该题目也是利用回溯法的经典题目,与电话号码的字母组合十分类似,重要的是画出深度优先搜索树,并找到路径和可选列表。用 left, right 表示可选列表,sb 记录当前...原创 2020-06-26 15:48:53 · 283 阅读 · 2 评论 -
Leetcode: 17. 电话号码的字母组合
题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。分析对于这类利用回溯法的题目,最重要的是将深度优先搜索树画出来,并找出路径和可选列表。然后,我们只要用代码模拟出深度优先搜..原创 2020-06-26 12:58:27 · 371 阅读 · 0 评论 -
Leetcode:334. 递增的三元子序列
题目给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的i, j, k,且满足0 ≤ i < j < k ≤ n-1,使得arr[i] < arr[j] < arr[k] ,返回 true ;否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,2,3,4,5]输出: true示例 2:输入: [5,4,3,2,1]输出: fa...原创 2020-06-25 10:57:25 · 157 阅读 · 0 评论 -
Leetcode: 16. 最接近的三数之和
题目给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3<= nums[i]<= 10^3-10^4...原创 2020-06-25 10:41:05 · 153 阅读 · 0 评论 -
Leetcode: 15. 三数之和
题目给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]分析暴力法的时间复杂度是O(n^3)。可以先固定一个值,然后寻找后两个值时可采取双指针的方法,将总的时间复杂度优化...原创 2020-06-25 10:35:52 · 7164 阅读 · 11 评论 -
Leetcode: 3. 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。分析符合滑动窗口类题目的特点:在数组中寻找一个范围,使得其值满足一...原创 2020-06-24 12:24:19 · 117 阅读 · 0 评论 -
Leetcode: 73. 矩阵置零
题目给定一个m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]进阶:一...原创 2020-06-24 10:32:54 · 100 阅读 · 0 评论 -
Leetcode: 43. 字符串相乘
题目给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。num1 和num2 只包含数字0-9。num1 和num2均不以零开头,除非是数字 0 本身。不能使用任何标准库的大...原创 2020-06-18 11:34:57 · 121 阅读 · 0 评论 -
1483. 树节点的第 K 个祖先
题目给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。请你设计并实现 getKthAncestor(int node, int k) 函数,函数返回节点 node 的第 k 个祖先节点。如果不存在这样的祖先节点,返回 -1 。树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。示例:输入:["TreeAncestor","getKthAncestor","原创 2020-06-17 09:40:58 · 588 阅读 · 0 评论 -
Leetcode: 1478. 安排邮桶
题目给你一个房屋数组houses和一个整数k,其中houses[i]是第 i栋房子在一条街上的位置,现需要在这条街上安排 k个邮筒。请你返回每栋房子与离它最近的邮筒之间的距离的 最小 总和。答案保证在 32 位有符号整数范围以内。示例 1:输入:houses = [1,4,8,10,20], k = 3输出:5解释:将邮筒分别安放在位置 3, 9 和 20 处。每个房子到最近邮筒的距离和为 |3-1| + |4-3| + |9-8| + |10-9| + |20...原创 2020-06-16 15:07:38 · 535 阅读 · 0 评论 -
Leetcode: 1482. 制作 m 束花所需要的最少天数
题目给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3, k = 1输出:3解释:让我们一起观察这三天的花开过程,x 表示花开,而.原创 2020-06-16 09:33:00 · 335 阅读 · 0 评论 -
Leetcode: 1481. 不同整数的最少数目
题目给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。示例 1:输入:arr = [5,5,4], k = 1输出:1解释:移除 1 个 4 ,数组中只剩下 5 一种整数。示例 2:输入:arr = [4,3,1,1,3,3,2], k = 3输出:2解释:先移除 4、2 ,然后再移除两个 1 中的任意 1 个或者三个 3 中的任意 1 个,最后剩下 1 和 3 两种整数。提示:1 <= arr..原创 2020-06-15 23:01:16 · 332 阅读 · 0 评论 -
Leetcode: 1477. 找两个和为目标值且不重叠的子数组
题目:给你一个整数数组arr 和一个整数值target。请你在 arr中找 两个互不重叠的子数组且它们的和都等于target。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1。实例:输入:arr = [3,2,2,4,3], target = 3输出:2解释:只有两个子数组和为 3 ([3] 和 [3])。它们的长度和为 2 。...原创 2020-06-15 11:27:19 · 779 阅读 · 0 评论