数组
Sun_Sky_Sea
站在巨人的肩膀上
展开
-
416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。直观的解法是使用递归,一层层的查找,递归的优化是使用记忆化的方式存储中间结果。第二种方法是使用动态规划的方法。解释:数组可以分割成 [1, 5, 5] 和 [11]。解释:数组不能分割成两个元素和相等的子集。输入:nums = [1,5,11,5]输入:nums = [1,2,3,5]原创 2022-11-23 11:54:30 · 213 阅读 · 1 评论 -
238. 除自身以外数组的乘积
所以需要进行两次计算,第一次用于求左部分的乘积,第二次求右部分的乘积,同时再将最后的计算结果一起计算出来。给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。输入: nums = [-1,1,0,-3,3]输入: nums = [1,2,3,4]输出: [24,12,8,6]输出: [0,0,9,0,0]原创 2022-10-17 17:32:40 · 124 阅读 · 0 评论 -
36. 有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。只需要根据以上规则,验证已经填入的数字是否有效即可。一个有效的数独(部分已被填充)不一定是可解的。对行、列、九宫格分别进行判断,具体看代码。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。空白格用 ‘.’ 表示。原创 2022-10-10 09:54:52 · 151 阅读 · 0 评论 -
289. 生命游戏
借用卷积的思想解题,定义卷积核,为了方便边界元素解题,填充0,填充的大小根据题意确定,当前元素的周围8个位置,所以行列各自增加2行2列来填充0,正好可以用3*3的卷积核大小进行卷积,卷积核中间的元素是0,因为算当前的元素的8个位置,所以是0。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;...原创 2022-08-29 22:34:35 · 71 阅读 · 0 评论 -
284. 顶端迭代器
注意:每种语言可能有不同的构造函数和迭代器 Iterator,但均支持 int next() 和 boolean hasNext() 函数。请你在设计一个迭代器,在集成现有迭代器拥有的 hasNext 和 next 操作的基础上,还额外支持 peek 操作。// 返回 1 ,指针移动到下一个元素 [1,2,3]// 返回 2 ,指针移动到下一个元素 [1,2,3]// 返回 3 ,指针移动到下一个元素 [1,2,3]int next() 返回数组中的下一个元素,并将指针移动到下个元素处。...原创 2022-08-29 10:47:25 · 164 阅读 · 0 评论 -
275. H 指数 II
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。题目已经排序,则使用倒序遍历,当citations[i] > h,则说明找到了一篇被引用了至少 h+1 次的论文。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6 次。...原创 2022-08-28 15:19:27 · 55 阅读 · 0 评论 -
274. H 指数
根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。计算并返回该研究者的 h 指数。由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。输入:citations = [3,0,6,1,5]输入:citations = [1,3,1]...原创 2022-08-28 15:02:31 · 54 阅读 · 0 评论 -
204. 计数质数
埃氏筛的定义:要得到自然数 n 以内的全部质数,必须把不大于 根号n 的所有质数的倍数剔除,剩下的就是质数。解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7。给定整数 n ,返回 所有小于非负整数 n 的质数的数量。...原创 2022-08-28 11:23:17 · 122 阅读 · 0 评论 -
200. 岛屿数量
目标是找到矩阵中 “岛屿的数量” ,上下左右相连的 1 都被认为是连续岛屿。深度优先搜索dfs方法: 设目前指针指向一个岛屿中的某一点。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。grid[i][j] 的值为 ‘0’ 或 ‘1’此外,你可以假设该网格的四条边均被水包围。(i, j),寻找包括此点的岛屿边界。输入:grid = [输入:grid = [...原创 2022-08-27 18:17:17 · 48 阅读 · 0 评论 -
260. 只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?除两个只出现一次的整数外,nums 中的其他数字都出现两次。输入:nums = [1,2,1,3,2,5]解释:[5, 3] 也是有效的答案。输入:nums = [-1,0]哈希表统计个数,或者使用位运算。输入:nums = [0,1]...原创 2022-08-27 17:40:10 · 43 阅读 · 0 评论 -
137. 只出现一次的数字 II
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。输入:nums = [0,1,0,1,0,1,99]可以用异或运算解题,也可以用统计个数解题。输入:nums = [2,2,3,2]...原创 2022-08-27 17:29:16 · 121 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]输出:5, nums = [1,1,2,2,3]// 在函数里修改输入数组对于调用者是可见的。输入:nums = [1,1,1,2,2,3]nums 已按升序排列。...原创 2022-08-27 13:07:11 · 56 阅读 · 0 评论 -
79. 单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word。如果 word 存在于网格中,返回 true;否则,返回 false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。board 和 word 仅由大小写英文字母组成。递归方法,并且回溯,具体看代码。...原创 2022-08-26 18:03:05 · 52 阅读 · 0 评论 -
57. 插入区间
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输入:intervals = [[1,5]], newInterval = [2,3]解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。输出:[[1,2],[3,10],[12,16]]输出:[[1,5],[6,9]]输出:[[1,5]]原创 2022-08-24 15:50:18 · 81 阅读 · 0 评论 -
90. 子集 II
子集问题用回溯的方法来解决,回溯法必然要用到递归。递归想好结束的条件及递归函数的定义,参数。如果不回溯,就会引起重复的问题。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]输入:nums = [1,2,2]输入:nums = [0]输出:[[],[0]]原创 2022-08-23 22:26:53 · 67 阅读 · 0 评论 -
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]从左到右,从上到下,从右到左,从下到上进行模拟顺时针的操作。输出:[1,2,3,6,9,8,7,4,5]原创 2022-08-22 23:08:02 · 212 阅读 · 0 评论 -
59. 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。模拟顺时针进行填充,定义4个边界。具体实现看代码及注释。原创 2022-08-21 17:27:24 · 72 阅读 · 0 评论 -
剑指 Offer II 057. 值和下标之差都在给定的范围内
剑指 Offer II 057. 值和下标之差都在给定的范围内原始题目链接:https://leetcode.cn/problems/7WqeDu/给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例 1:输入:nums = [1,2,3,1], k = 3, t = 0输出:原创 2022-05-31 16:58:19 · 68 阅读 · 0 评论 -
786. 第 K 个最小的素数分数
786. 第 K 个最小的素数分数原始题目链接:https://leetcode.cn/problems/k-th-smallest-prime-fraction/给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。对于每对满足 0 <= i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的原创 2022-05-23 22:58:39 · 95 阅读 · 0 评论 -
658. 找到 K 个最接近的元素
658. 找到 K 个最接近的元素原始题目链接:https://leetcode.cn/problems/find-k-closest-elements/给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5],原创 2022-05-22 13:51:26 · 127 阅读 · 0 评论 -
229. 求众数 II
229. 求众数 II原始题目链接:https://leetcode-cn.com/problems/majority-element-ii/给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。示例 1:输入:[3,2,3]输出:[3]示例 2:输入:nums = [1]输出:[1]示例 3:输入:[1,1,1,3,3,2,2,2]输出:[1,2]解题思路:统计数组中的元素个数,然后根据出现次数的条件进行判断即可。代码实现:class Solut原创 2022-04-03 13:37:02 · 315 阅读 · 0 评论 -
152. 乘积最大子数组
152. 乘积最大子数组原始题目链接:https://leetcode-cn.com/problems/maximum-product-subarray/给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。解题思路:原创 2021-12-22 22:27:40 · 1001 阅读 · 0 评论 -
139. 单词拆分
139. 单词拆分原始题目链接:https://leetcode-cn.com/problems/word-break/给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示原创 2021-12-22 20:44:18 · 104 阅读 · 0 评论 -
315. 计算右侧小于当前元素的个数
315. 计算右侧小于当前元素的个数原始题目链接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例 1:输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)原创 2021-12-21 22:12:59 · 188 阅读 · 0 评论 -
189. 旋转数组
189. 旋转数组原始题目链接:https://leetcode-cn.com/problems/rotate-array/给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?解题思路:题目要求空间复杂度为 O(1) 的 原地算法,所以不能申请额外的空间来帮助解决问题,需要数组内原地移动交换元素,所以一共需要3次翻转数组中的元素,已k为临原创 2021-08-12 15:40:10 · 41 阅读 · 0 评论 -
78. 子集
78. 子集原始题目链接:https://leetcode-cn.com/problems/subsets/给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。解题思路:枚举法,初始化结果res为仅有一个空列表元素的列表:[[]],然后对于数组nums中的每一个元素开始遍历res中的所有元素并组合成新的列表元素,并增添到res中,直到nums中的元素遍历完结束。代码实现:class Solut原创 2021-08-12 14:27:39 · 41 阅读 · 0 评论 -
55. 跳跃游戏
55. 跳跃游戏原始题目链接:https://leetcode-cn.com/problems/jump-game/给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。解题思路:贪心算法解题: 如果当前数组元素所表示的步数能够到达最后的位置,那么该元素之前的位置元素也一定能够走到最后的位置。所以就看能够到达最远的位置是否大于等于最后的数组位置下标,大于等于的话就一定到达最后的位置。具体看代码及注释原创 2021-08-10 16:25:54 · 38 阅读 · 0 评论 -
64. 最小路径和
64. 最小路径和原始题目链接:https://leetcode-cn.com/problems/minimum-path-sum/给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。解题思路:典型的动态规划题,定义动态数组,这里定义dp[i][j]表示,到达grid数组的坐标为(i,j)位置的最小路径和,初始化动态dp数组,赋初始值,注意边界条件和非边界条件的赋值,具体实现看代码及注释。代原创 2021-08-05 15:30:02 · 62 阅读 · 0 评论 -
31. 下一个排列
31. 下一个排列原始题目链接:https://leetcode-cn.com/problems/next-permutation/实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。解题思路:题目要求给定的序列的字典序的下一个最大的序列,不存在的话就从小到大排列,即升序输出。首先查找给定的输入序列,从数组的最后面向前开始查找位置相邻并且大小上原创 2021-07-15 23:22:36 · 56 阅读 · 0 评论 -
18. 四数之和
18. 四数之和原始题目链接:https://leetcode-cn.com/problems/4sum/给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。解题思路:和三数之和的思路一样,只是在三数之和的基础上再套一层循环,同样通过去重操作加快遍历,另一个变化是,new_target =原创 2021-07-08 16:51:18 · 55 阅读 · 0 评论 -
16. 最接近的三数之和
16. 最接近的三数之和原始题目链接:https://leetcode-cn.com/problems/3sum-closest/给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。解题思路:这道题和三数之和的思路是一样的,先排序数组,然后遍历数组,固定一个数字i,然后取剩下的两个数字l和r分别初始化为i+1和数组最后的数字,开始内部循环遍历查找符合的题目条件的三原创 2021-07-05 17:52:48 · 60 阅读 · 0 评论 -
15. 三数之和
15. 三数之和原始题目链接:https://leetcode-cn.com/problems/3sum/给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路:先判断边界条件,数组是否存在,是否包含至少3个元素,边界条件都判断完后,再将数组排序,然后遍历数组中的元素,每遍历一个元素的同时,设置第二个数和第三个数分别为当前遍历的第一个元素原创 2021-06-29 18:22:38 · 42 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器原始题目链接:https://leetcode-cn.com/problems/container-with-most-water/解题思路:这道题需要清楚面积的计算公式,设定两个指针分别指向数组中的两端,则面积的计算公式为:两个指针指向的数组数字中的最小值 *两个指针之间的距离。每次计算一个面积后,再移动指针指向下一个数组中的位置,这里每次移动上次计算公式中指针指向较小的那个指针,因为每次移动指针,两个指针的距离会变小,移动大的指针,根据计算公式每次是取两个值指向的最小原创 2021-06-29 16:52:44 · 38 阅读 · 0 评论