LeetCode数组
LeetCode数组
overlordmax
这个作者很懒,什么都没留下…
展开
-
384. 打乱数组
1.题目描述给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class: Solution(int[] nums) 使用整数数组 nums 初始化对象 int[] reset() 重设数组到它的初始状态并返回 int[] shuffle() 返回数组随机打乱后的结果示例:提示:(1)1 <= nums.length <= 200(2)-10^6 <= nums[i] <= 10^6(3)nums 中的所有元素都是原创 2021-03-24 13:00:26 · 354 阅读 · 0 评论 -
334. 递增的三元子序列
1.题目描述给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:示例 2:示例 3:提示:1 <= nums.length <= 105-2^31 <= nums[i] <= 2^31 - 12.方法一求最长上升子序列,原创 2021-02-09 11:46:05 · 401 阅读 · 0 评论 -
分解质因数
1.题目描述1.将一个整数分解为若干质因数之乘积2.你需要从小到大排列质因子2.思路从最小的质数2开始递增到根号n为止:(1)如果这个数可以整除n,则加入结果,并且n更新为n/i。(2)否则递增i。3.代码#include <iostream>#include <vector>using namespace std;int main() { int n = 8; vector<int> res; for (int i = 2; i * i原创 2021-02-08 17:14:08 · 159 阅读 · 0 评论 -
628. 三个数的最大乘积
1.题目描述给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:示例 2:示例 3:提示:3 <= nums.length <= 104-1000 <= nums[i] <= 10002.思路1.如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。2.如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的原创 2021-02-01 11:44:00 · 144 阅读 · 0 评论 -
166. 分数到小数
1.题目描述给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路小数部分如果余数重复出现两次就表示该小数是循环小数。转换为long long防止溢出处理正负号,一正一负取负号分子分母全部转换为正数获得小数原创 2021-01-20 16:11:17 · 114 阅读 · 0 评论 -
470. 用 Rand7() 实现 Rand10()
1.题目描述已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。示例 1:示例 2:示例 3:提示:rand7 已定义。传入参数: n 表示 rand10 的调用次数。进阶:rand7()调用次数的 期望值 是多少 ?你能否尽量少调用 rand7() ?2.思路要从 rand7() 到 rand10(),也要求是等概率的,那只要我们把小的数映射到原创 2021-01-09 14:41:40 · 218 阅读 · 0 评论 -
59. 螺旋矩阵 II
1.题目描述给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:2.思路生成一个 n×n 空矩阵 res,随后模拟整个向内环绕的填入过程:1.定义当前左右上下边界 left,right,top,bottom,初始值 num = 1,迭代终止值 end = n * n;2.当 num <= end时,始终按照 从左到右 从上到下 从右到左 从下到上 填入顺序循环,每次填入后: 执行 num += 1:得到下一个需要填入的数字;原创 2021-01-09 13:22:50 · 104 阅读 · 0 评论 -
204. 计数质数
1.题目描述统计所有小于非负整数 n 的质数的数量。示例:2.思路1.首先从 2 开始,我们知道 2 是一个素数,那么 2 × 2 = 4, 3 × 2 = 6, 4 × 2 = 8… 都不可能是素数了。2.然后我们发现 3 也是素数,那么 3 × 2 = 6, 3 × 3 = 9, 3 × 4 = 12… 也都不可能是素数了。3.由于因子的对称性,其中的 for 循环只需要遍历 [2,sqrt(n)] 就够了4.除此之外,很难注意到内层的 for 循环也可以优化,这样可以把 i 的整数倍都原创 2020-09-20 21:48:41 · 95 阅读 · 0 评论 -
134. 加油站
1.题目描述在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:1.如果题目有解,该答案即为唯一答案。2.输入数组均为非空数组,且长度相同。3.输入数组中的元素均为非负数。示例 1:示例 2:2.思路total_tank = sum(gas原创 2020-09-09 19:58:20 · 143 阅读 · 0 评论 -
128. 最长连续序列
1.题目描述给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:2.思路考虑枚举数组中的每个数 xxx,考虑以其为起点,不断尝试匹配 x+1,x+2,⋯x+1, x+2, \cdotsx+1,x+2,⋯是否存在,假设最长匹配到了 x+yx+yx+y,那么以 xxx 为起点的最长连续序列即为 x,x+1,x+2,⋯x, x+1, x+2, \cdotsx,x+1,x+2,⋯,其长度为 y+1y+1y+1,我们不断枚举并更新答案即可。采用哈希表,从存在前驱数x原创 2020-09-09 11:47:49 · 149 阅读 · 0 评论 -
118. 杨辉三角
1.题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:2.思路初始化一个全1的三角,然后根据题意,每个数是它左上方和右上方的数的和来给三角赋值。3.代码class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res;原创 2020-09-05 23:20:25 · 68 阅读 · 0 评论 -
73. 矩阵置零
1.题目描述给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:示例 2:2.思路1.每一行和每一列的第一个元素设置为标识位,如果为0,则标识该行或者该列存在0元素2.因为第一行和第一列的元素都是matrix[0][0],令其表示第一行,所以单独设置一个flag来标识第一列的情况3.更新数值时,从右下角到左上角更新,因为标识位位于最左边和最上边,不能影响标识位的值3.代码class Solution {public:原创 2020-08-31 21:34:25 · 140 阅读 · 0 评论 -
56. 合并区间
1.题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:示例 2:提示:1.intervals[i][0] <= intervals[i][1]2.排序按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的:用数组 merged 存储最终的答案。首先,我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入 merged 数组中,并按顺序依次考虑之后的每原创 2020-08-31 11:25:28 · 81 阅读 · 0 评论 -
55. 跳跃游戏
1.题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:示例 2:2.思路依次遍历数组中的每一个位置,并实时维护最远可以到达的位置。对于当前遍历到的位置 x,如果它在最远可以到达的位置的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用 x+nums[x] 更新最远可以到达的位置。在遍历的过程中,如果最远可以到达的位置大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就原创 2020-08-31 10:31:24 · 258 阅读 · 0 评论 -
48. 旋转图像
1.题目描述给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:示例 2:2.思路先沿左下-右上对角线翻转,再沿中线上下翻转。3.代码class Solution {public: void rotate(vector<vector<int>>& matrix) { int size = matri原创 2020-08-28 17:14:37 · 108 阅读 · 0 评论 -
41. 缺失的第一个正数
1.题目描述给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:示例 2:示例 3:提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。2.思路遍历数组,如果nums[i] != nums[nums[i] - 1],则交换,把数字放到数组中的正确位置,当所有的数字都放到正确位置之后,再遍历数组,第一个不等于下标+1的数字就是结果。3.代码class Solution {public: int firstMissingPositive原创 2020-08-26 21:36:00 · 75 阅读 · 0 评论 -
36. 有效的数独
1.题目描述判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。1.数字 1-9 在每一行只能出现一次。2.数字 1-9 在每一列只能出现一次。3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:示例 2:说明:1.一个有效的数独(部分已被填充)不一定是可解的。2.只需要根据以上规则,验证已经填入的数字是否有效即可。3.给定数独序列只包原创 2020-08-24 23:26:37 · 126 阅读 · 0 评论 -
645. 错误的集合
1.题目描述集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:注意:1.给定数组的长度范围是 [2, 10000]。2.给定的数组是无序的。2.思路遍历数组,通过交换把数字放到正确的位置上。算法流程:1.当nums[i] != i+1原创 2020-07-22 19:33:29 · 84 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素
1.题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:提示:你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。2.方法1(二分查找)矩阵的左上角为最小值,右下角为最大值,以最小值最大值为上下边界,求出中间值mid,遍历矩阵,统计到中间值mid有多少个数count,如果count小于k,说明第k小的数在mid后面,low = mid + 1,否则high = mid -原创 2020-07-22 00:00:31 · 217 阅读 · 0 评论 -
566. 重塑矩阵
1.题目描述在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例 1:示例 2:注意:1.给定矩阵的宽和高范围在 [1, 100]。2.给定的 r 和 c 都是正数。2.思路原创 2020-07-21 22:58:35 · 157 阅读 · 0 评论 -
581. 最短无序连续子数组
581. 最短无序连续子数组1.题目描述给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:说明 :1.输入的数组长度范围在 [1, 10,000]。2.输入的数组可能包含重复元素 ,所以升序的意思是<=。2.思路从数组头部开始找升序部分,从数组尾部开始找降序部分,则...原创 2020-04-26 23:17:11 · 100 阅读 · 0 评论 -
461. 汉明距离
461. 汉明距离1.题目描述两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 2^31.上面的箭头指出了对应二进制位不同的位置。2.思路两个数做异或,则不同的位置为1,然后统计二进制数字中1的个数。3.代码class Solution {public: int h...原创 2020-04-24 22:26:40 · 110 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
448. 找到所有数组中消失的数字1.题目描述给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:2.思路int[] nums={2,3...原创 2020-04-24 22:08:07 · 70 阅读 · 0 评论 -
16. 最接近的三数之和
16. 最接近的三数之和1.题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。2.思路排序和双指针1.首先进行数组排序,时间复杂度 O(nlogn)2.使用前指针指向 start = i + 1 处,后指针指向 end = nums.leng...原创 2020-03-30 18:00:19 · 142 阅读 · 0 评论 -
9. 回文数
9. 回文数1.题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:示例 2:示例 3:进阶:你能不将整数转为字符串来解决这个问题吗?2.思路把数字的后一半翻转,和前一半进行比较,如果数字的长度为偶数,则两部分相等则是回文数,如果数字的长度为奇数,则后一半除以10后和前一半相等。3.代码class Solution ...原创 2020-03-30 14:31:37 · 97 阅读 · 0 评论 -
7. 整数反转
7. 整数反转1.题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:示例 2:示例 3:2.思路重复“弹出” x 的最后一位数字,并将它“推入”到 res的后面。最后,res将与 x相反。但是当 temp=rev*10+pop 时会导致溢出。(1)从ans * 10 + pop > MAX_VALUE这个溢出条件来看:a.当出现...原创 2020-03-30 13:48:46 · 127 阅读 · 0 评论 -
39. 组合总和
39. 组合总和1.题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:1.所有数字(包括 target)都是正整数。2.解集不能包含重复的组合。示例 1:示例 2:2.思路(回溯法)回溯算法框架。解决一个回溯...原创 2020-03-08 23:18:53 · 68 阅读 · 0 评论 -
283. 移动零
283. 移动零1.题目描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:说明:1.必须在原数组上操作,不能拷贝额外的数组。2.尽量减少操作次数。2.思路 参考快速排序的思想,快速排序首先要确定一个待分割的元素做中间点x,然后把所有小于等于x的元素放到x的左边,大于x的元素放到其右边。这里我们可以用0当做这个中间点,把不等于...原创 2020-03-03 23:18:53 · 63 阅读 · 0 评论 -
152. 乘积最大子序列
152. 乘积最大子序列1.题目描述给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:示例 2:2.思路(动态规划)(1)状态定义:dp[i]表示以i结尾的子序列的最大乘积。(2)转移方程:dp[i] = max(dp[i-1]*nums[i],num[i]),考虑前面的子序列和不考虑前面的子序列。以i-1结尾的子序列的最大乘积乘...原创 2020-03-02 19:57:05 · 135 阅读 · 0 评论 -
数字和为sum的方法数
数字和为sum的方法数1.题目描述给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行:第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)第二行为n个正整数A[i] ( 32位整数),以空格隔开。输出描述:输出所求的方案数...原创 2020-02-22 12:20:24 · 510 阅读 · 0 评论 -
18. 四数之和
18. 四数之和1.题目描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:2.思路 四数之和与三数之和的思路是一样的,使用四个指针(a<b<c<d...原创 2020-02-21 21:59:27 · 1074 阅读 · 0 评论 -
560. 和为K的子数组
560. 和为K的子数组1.题目描述给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :说明 :1.数组的长度为 [1, 20,000]。2.数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。2.思路 如果累计总和(sum[i]表示累加到下标i的和),在索引 i 和 j 处相差 k,即 su...原创 2020-02-16 16:13:48 · 93 阅读 · 0 评论 -
239. 滑动窗口最大值
239. 滑动窗口最大值1.题目描述给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:2.思路(双向队列)声明了一个变量 dequemaxWin,用于存储下标。这个变量有以下特点:1.变量的最前端(也就是 window.front())是此次遍历的最...原创 2020-02-10 20:07:05 · 159 阅读 · 0 评论 -
137. 只出现一次的数字 II
137. 只出现一次的数字 II1.题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:示例 2:2.思路1.二进制下不考虑进位的加法:本题为 136. Single Number 的拓展,136 题中我们用到了异或运算。实际上,异或运算的...原创 2020-02-09 14:04:55 · 176 阅读 · 0 评论 -
15. 三数之和
3sum1.题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:2.思路1.首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计...原创 2020-02-06 20:54:34 · 88 阅读 · 0 评论 -
31. 下一个排列
31. 下一个排列1.题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。2.思路我们可以将该问题形式化地描述为:给定若干个数字,将其组合为一个整数。如何将这些数字重新排列,以得到下一...原创 2020-02-05 19:11:16 · 91 阅读 · 0 评论 -
695. 岛屿的最大面积
695. 岛屿的最大面积1.题目描述给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:对于上面这个给定矩阵应返回 6。注意答案不应该是11,因为岛屿只能包含水平或垂直的四个方向的‘...原创 2020-02-05 14:08:51 · 278 阅读 · 0 评论 -
200. 岛屿数量
200. 岛屿数量1.题目描述给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:示例 2:2.方法1(DFS)将二维网格看成一个无向图,竖直或水平相邻的 1 之间有边。线性扫描整个二维网格,如果一个结点包含 1,则以其为根结点启动深度优先搜索。...原创 2020-02-05 13:42:43 · 173 阅读 · 0 评论 -
905. 按奇偶排序数组
905. 按奇偶排序数组1.题目描述给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:2.思路维护两个指针,第一个指针指向数组的第一个数字,第二个指针指向最后一个数字,如果第一个指针指向的数字是奇数,第二个指针指向的数字是偶数则交换这两个数字。3.代码class Solution {publ...原创 2020-01-14 17:23:54 · 93 阅读 · 0 评论 -
442. 数组中重复的数据
442. 数组中重复的数据1.题目描述给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:2.思路利用题目中所给信息 1 ≤ a[i] ≤ n ,将出现过的数字作为数组的index(访问元素时需要减一),如果出现一次的,将该ind...原创 2020-01-11 13:36:52 · 167 阅读 · 0 评论