数组
文章平均质量分 72
失业边缘,疯狂挣扎
这个作者很懒,什么都没留下…
展开
-
39. 组合总和(Java)(回溯递归)
1 题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], target =原创 2020-09-18 16:32:51 · 194 阅读 · 0 评论 -
377. 组合总和 Ⅳ(Java)(正向迭代动归)(一维背包问题)
1 题目给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum-iv著作权原创 2020-09-18 13:16:38 · 203 阅读 · 0 评论 -
494. 目标和(Java)(回溯递归)(动归迭代,背包问题)
1 题目给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最终原创 2020-05-19 13:49:08 · 134 阅读 · 0 评论 -
718. 最长重复子数组(Java)(类似求字符串的公共子串)(动归)
1 题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 1002 Java2.1 方法一(暴力;超时)每次从A、B中取长度为l的子数组(l以短数组的长度为起始递减至1),看两个数组是否相等,如果相等,立即原创 2020-05-16 12:13:31 · 177 阅读 · 0 评论 -
!42. 接雨水(Java)(单调栈)(动态规划,左缀max,右缀max)(双指针)
1 题目给定 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]输出: 62 Java2.1 方法一(单调栈,按行求)当两个较高元素中间夹一个或几个较低元素,此时可存水,即“凹陷部分”class Solution原创 2020-05-11 17:10:36 · 202 阅读 · 0 评论 -
560. 和为K的子数组(Java)(窗口数组)(HashMap妙用)
1 题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)...原创 2020-05-08 00:06:20 · 142 阅读 · 0 评论 -
53. 最大子序和(Java)(!动归正向迭代)
1 题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。来源:力扣(LeetCode)链接:https://leetc...原创 2020-05-07 17:54:03 · 88 阅读 · 0 评论 -
188. 买卖股票的最佳时机 IV(Java)(动归正向迭代)
1 题目给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能...原创 2020-04-18 16:55:20 · 129 阅读 · 0 评论 -
714. 买卖股票的最佳时机含手续费(Java)(动归正向迭代,二维dp及优化)
1 题目给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices...原创 2020-04-17 16:40:16 · 146 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期(Java)(动归正向迭代)
1 题目给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖...原创 2020-04-17 13:58:20 · 84 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III(Java)(动归正向迭代)
1 题目给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获...原创 2020-04-15 17:51:44 · 109 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II(Java)(动归正向迭代,二维dp及优化)(贪心)
1 题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔...原创 2020-04-13 17:30:36 · 109 阅读 · 0 评论 -
63. 不同路径 II(Java)(动归逆向递归,动归正向迭代,回溯正向递归;一条龙)(二维dp优化)
1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,...原创 2020-04-05 12:51:52 · 109 阅读 · 0 评论 -
62. 不同路径(Java)(回溯正向递归;动规正向迭代;动规逆向递归;一条龙)
1 题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。...原创 2020-04-04 16:25:49 · 124 阅读 · 0 评论 -
15. 三数之和(Java)(三指针,滑动窗口)
1 题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]来源:力扣(LeetCo...原创 2020-04-03 17:36:19 · 186 阅读 · 0 评论 -
1. 两数之和(Java)(HashMap数组查找)
1 题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]2 Java...原创 2020-04-03 14:01:45 · 298 阅读 · 0 评论 -
面试题51. 数组中的逆序对(Java)(归并排序)
1 题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui...原创 2020-04-02 14:31:17 · 191 阅读 · 0 评论 -
面试题45. 把数组排成最小的数(Java)(Lambda,comparator的Array.sort(),compareTo比较String)
1 题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后...原创 2020-03-30 19:22:03 · 707 阅读 · 0 评论 -
面试题47. 礼物的最大价值(Java)(动态规划迭代)(动态规划递归)
1 题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值...原创 2020-03-28 20:50:06 · 268 阅读 · 0 评论 -
面试题21. 调整数组顺序使奇数位于偶数前面(Java)(相遇指针)(双指针)
1 题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nums[i] <= 10000来源:力扣(LeetCo...原创 2020-03-27 15:36:07 · 84 阅读 · 0 评论 -
面试题12. 矩阵中的路径(Java)(回溯递归)(二维数组遍历)
1 题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”...原创 2020-03-26 13:19:18 · 497 阅读 · 0 评论 -
面试题13. 机器人的运动范围(Java)(矩阵DFS;回溯递归)
1 题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能...原创 2020-03-25 13:31:56 · 153 阅读 · 0 评论 -
面试题57. 和为s的两个数字(167. 两数之和 II - 输入有序数组)(Java)(相遇指针滑动窗口)(HashSet数组查找)
1 题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:...原创 2020-03-24 18:03:36 · 77 阅读 · 0 评论 -
面试题04. 二维数组中的查找(Java)(思维)
1 题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17...原创 2020-03-22 15:36:06 · 121 阅读 · 0 评论 -
面试题53 - II. 0~n-1中缺失的数字(Java)(二分查找变形)
1 题目2 Java2.1 方法一(二分查找变形)class Solution { public int missingNumber(int[] nums) { // 若[0,1,3],最后定位的是,l==2,即l位缺失,值比索引大 int l = 0, r = nums.length; while(l < r){ ...原创 2020-03-22 13:46:39 · 136 阅读 · 0 评论 -
面试题11. 旋转数组的最小数字(Java)(二分查找变形)
1 题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0注意:本题与主站 154 题相同:https://leetcod...原创 2020-03-19 15:59:46 · 82 阅读 · 0 评论 -
面试题66. 构建乘积数组(Java)(思维,动归迭代)
1 题目给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 1000002 Java2...原创 2020-03-19 12:14:00 · 79 阅读 · 0 评论 -
面试题42. 连续子数组的最大和(Java)(动态规划迭代)(一维dp降维)
1 题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[...原创 2020-03-19 11:53:28 · 266 阅读 · 0 评论 -
面试题59 - I. 滑动窗口的最大值(239. 滑动窗口最大值)(Java)(单调队列)(滑动窗口)
1 题目给定一个数组 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 31 [3 -1 -3] 5 3 6 7 ...原创 2020-03-18 12:56:22 · 150 阅读 · 0 评论 -
面试题53 - I. 在排序数组中查找数字 I(34. 在排序数组中查找元素的第一个和最后一个位置)(Java)(二分查找变形)
1 题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...原创 2020-03-17 18:06:46 · 121 阅读 · 0 评论 -
面试题61. 扑克牌中的顺子(Java)
1 题目从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True限制:数组长度为 5数组的数取值为 [0, 13] .来源:力扣(Leet...原创 2020-03-17 15:07:12 · 165 阅读 · 0 评论 -
面试题39. 数组中出现次数超过一半的数字(169. 多数元素)(Java)(HashMap)
1 题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majo...原创 2020-02-09 18:21:08 · 664 阅读 · 0 评论 -
260. 只出现一次的数字 III(面试题56 - I. 数组中数字出现的次数)(Java)(HashMap)
1 题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums <= ...原创 2020-03-14 19:59:47 · 111 阅读 · 0 评论 -
137. 只出现一次的数字 II(Java)(面试题56 - II. 数组中数字出现的次数 II)(HashSet求非重复元素和)(HashMap value记录元素是否重复)
1 题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...原创 2020-03-14 19:22:38 · 146 阅读 · 0 评论 -
136. 只出现一次的数字(Java)(位运算)
1 题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/si...原创 2020-03-14 18:18:23 · 100 阅读 · 0 评论 -
442. 数组中重复的数据(Java)(HashSet)(桶)(自哈希)
1 题目给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find...原创 2020-03-14 17:53:37 · 101 阅读 · 0 评论 -
448. 找到所有数组中消失的数字(Java)(HashSet)(桶)(自哈希)
1 题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]来源:力扣(Lee...原创 2020-02-16 16:17:03 · 157 阅读 · 0 评论 -
面试题03. 数组中重复的数字(Java)(HashSet)(桶)(自哈希)
1 题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:ht...原创 2020-03-14 16:41:02 · 129 阅读 · 0 评论 -
47. 全排列 II(Java)(回溯递归;HashSet去重)(回溯递归;剪枝去重)
1 题目给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 Java2.1 方法一...原创 2020-03-11 18:59:55 · 177 阅读 · 0 评论 -
46. 全排列(Java)(回溯递归)
1 题目给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所有。商业转载请联系官方授权,非商业...原创 2020-03-11 17:53:26 · 352 阅读 · 0 评论