数组
刷题
amor_1
这个作者很懒,什么都没留下…
展开
-
数组中最大数对和的最小值
题目一个数对 (a,b) 的 数对和 等于 a + b 。最大数对和 是一个数对数组中最大的 数对和 。比方说,如果我们有数对 (1,5) ,(2,3) 和 (4,4),最大数对和 为 max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8 。给你一个长度为 偶数 n 的数组 nums ,请你将 nums 中的元素分成 n / 2 个数对,使得:nums 中每个元素 恰好 在 一个 数对中,且最大数对和 的值 最小 。请你在最优数对划分的方案下,返回最小的 最大数对和 。示原创 2021-07-20 20:12:48 · 246 阅读 · 0 评论 -
leetcode581:最短无序连续子数组
最短无序连续子数组给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。思路和代码从头到尾遍历,只需要找到降序部分的最大值和最小值,然后再遍历数组找到最大值最小值应该在的位置。class Solution {public:原创 2020-08-21 14:19:51 · 140 阅读 · 0 评论 -
leetcode329:矩阵中的最长递增路径
矩阵中的最长递增路径给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[[9,9,4],[6,6,8],[2,1,1]]输出: 4解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums =[[3,4,5],[3,2,6],[2,2,1]]输出: 4解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方原创 2020-08-21 10:07:23 · 256 阅读 · 1 评论 -
螺旋矩阵
螺旋矩阵leetcode给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出...原创 2020-05-08 11:17:18 · 197 阅读 · 0 评论 -
杨辉三角
杨辉三角leetcode输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]思路和代码class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>&g...原创 2020-05-08 11:00:30 · 291 阅读 · 0 评论 -
串联所有单词的子串
串联所有单词的子串leetcode给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”,words = [“foo”,“bar”]输出:[...原创 2020-05-08 10:42:05 · 125 阅读 · 0 评论 -
字符串相乘
字符串相乘leetcode给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”思路和代码class Solution {public:...原创 2020-05-07 17:24:17 · 113 阅读 · 0 评论 -
最小覆盖子串
最小覆盖子串leetcode给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。思路和代码参考链接滑动窗口+哈希首先用一个哈希表示 t...原创 2020-05-07 17:13:52 · 173 阅读 · 1 评论 -
插入区间
插入区间leetcode给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例 2:输入: intervals = [[1,2],[3,5]...原创 2020-05-07 14:08:14 · 151 阅读 · 0 评论 -
回文数
回文数leetcode判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。思路和代码class Solution {public: bool isPalin...原创 2020-05-07 11:47:02 · 109 阅读 · 0 评论 -
整数反转
整数反转leetcode给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路...原创 2020-05-07 11:24:06 · 282 阅读 · 0 评论 -
最小路径和
最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路和代码就是简单的动态规划class Solution {public: int min...原创 2020-05-03 11:03:12 · 103 阅读 · 0 评论 -
交错字符串
交错字符串给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false思路和代码Ø d b b c a...原创 2020-05-01 12:00:20 · 116 阅读 · 0 评论 -
最大矩形
最大矩形给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6思路和代码可以把第一行看作数组1,0,1,0,0可以把第二行看作数组2,0,2...原创 2020-05-01 10:27:11 · 144 阅读 · 0 评论 -
分割回文串
分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]思路和代码解法1:DFS从第一个元素开始划分,判断是不是回文串,是的话就加入,然后递归后面的。之后回溯从第二个元素划分,判断是否是回文串,再递归。所以需要三个函数,第一个是主函数。第二...原创 2020-04-20 15:46:03 · 859 阅读 · 0 评论 -
最大子序和
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路和代码空间复杂度为O(1)的动态规划用一个last表示以上一个结尾的最大子序和,主要就是判断last+nums[i]和nums[i]谁大...原创 2020-05-01 09:35:55 · 98 阅读 · 0 评论 -
三角形最小路径和
三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。思路和代码动态规划,首先定义一个dp数组,数组的大小和三角形最后一行大小一致,dp[0] = triangle[0][0],然后遍历...原创 2020-04-30 21:57:22 · 89 阅读 · 0 评论 -
盛水最多的容器
盛水最多的容器leetcode给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。思路和代码用 i 指向开头,j 只想末尾,然后开始计算容器的体积c...原创 2020-04-27 14:39:01 · 87 阅读 · 0 评论 -
无重复字符的最长字串
无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路和代码滑动窗口,用 i 表示窗口的右端点,用 j 表示窗口的左端点,用集合来存放不重复的元素,遍历一个元素,若该元素不在集合中,则可以直接插入,并比较窗口长度,若在窗口内,则一直移除元...原创 2020-04-27 14:07:48 · 223 阅读 · 0 评论 -
跳跃游戏
跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。动态规划一个dp数组表示第 i 个位置可跳的最远大小,若dp[ i ] <...原创 2020-04-27 11:19:21 · 316 阅读 · 0 评论 -
sqrt(x)
x的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。思路和代码class Solution {public: int mySqrt(int x) { long i = 0; long j = x/2+1; while(i&...原创 2020-04-27 10:47:48 · 178 阅读 · 0 评论 -
Pow(x, n)
Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。思路和代码唯一要考虑的是指数为负数的情况class Solution {public: double fastPow(double x, long long n) { if (n == 0) { return 1.0; } doubl...原创 2020-04-27 10:40:11 · 163 阅读 · 0 评论 -
解数独
解数独编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。思路和代码这个题目和N皇后问题很像,遍历每一行,对改行的空格开始用0-9填充,填充前判断是否有效,就是递归回溯class Solution ...原创 2020-04-23 15:45:40 · 153 阅读 · 0 评论 -
组合总和
组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:...原创 2020-04-23 14:51:50 · 107 阅读 · 0 评论 -
N皇后
N皇后n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。思路和代码就是每一行只能放一个,每一列只能放一个,正对角线和副对角线都只能有一个。DFS:第一个函数就是主函数,第二个函数就是DFS的过程,第三个是判断是否会受到攻击。第三个函数abs(row-i)==abs(col-pos[i])既表示正对角线又表示副对角线。class Solut...原创 2020-04-20 21:24:32 · 166 阅读 · 0 评论 -
不同路径
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路和代码经典的动态规划class Solution {public: int uniquePaths(int m, int n) { vec...原创 2020-04-20 20:25:08 · 144 阅读 · 0 评论 -
被围绕的区域
被围绕的区域给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X思路和代码解法1:DFS深度优先,从边缘处为O的开始深度优先,所有相连的O都...原创 2020-04-19 19:45:27 · 473 阅读 · 0 评论 -
电话号码的字母组合
电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路和代码递归class Solution {private: vector<...原创 2020-04-17 20:29:25 · 115 阅读 · 0 评论 -
组合
组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]思路和代码class Solution {public: vector<vector<int>> res; vector&...原创 2020-04-17 20:06:27 · 105 阅读 · 0 评论 -
全排列
全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路和代码递归和回溯start从0开始,和后面每一个元素交换位置,然后加入,之后递归class Solution {public: vector<vector...原创 2020-04-16 20:01:56 · 87 阅读 · 0 评论 -
子集
子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]思路和代码递归和回溯class Solution {public: vector<vector<in...原创 2020-04-16 19:33:40 · 86 阅读 · 0 评论 -
最大子数组异或和
最大子数组的异或和描述求一个数组,子数组的最大异或和思路和代码暴力思路:对于每一个 i ,计算从0到 i 的异或和,从1到 i ,从2到 i ,一直到 i - 1 到 i ,找出最大的异或和,但是时间复杂度为O(N^3)。改进思路,用eor表示从0到 i 的异或和,dp[ i ]记录从0到 i 的异或和。start还是从1到 i ,从2到 i ,一直到 i-1 到 i ,那么从start...原创 2020-03-26 20:04:48 · 721 阅读 · 0 评论 -
累加和为aim的最长子数组
参考:https://www.cnblogs.com/zzw1024/p/11070215.html扩展1一个数组中要么是奇数,要么是偶数,求奇数和偶数相等的最长子数组。思路用1表示奇数,用-1表示偶数,那么就是求累加和为0的最长子数组,参考上面扩展2求一个数组怎样划分可以使得子数组异或为0的个数最多。思路动态规划:定义一个dp数组,dp[ i ]表示以 i 结尾可以划分的最多个...原创 2020-03-20 20:18:29 · 121 阅读 · 0 评论 -
买卖股票的最佳时机
买卖股票的最佳时机描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6...原创 2020-03-20 15:53:52 · 68 阅读 · 0 评论 -
只出现一次的数字
single number(只出现一次的数字)描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。哈希用一个哈希表,遍历数组时,若当前元素不在哈希表中,则如哈希表,若已经在哈希表中了,则不是该元素,将该元素从哈希表中删除,哈希表中剩下的最后一个元素就是只出现一次的数字。class Solution {public: int ...原创 2020-03-07 13:14:13 · 96 阅读 · 0 评论 -
分发糖果
分发糖果描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?思路和代码首先给每一个孩子分配一个糖果然后从左往右遍历一遍,若当前 i 大于 i-1,则他的糖果应该比...原创 2020-03-07 12:07:44 · 93 阅读 · 0 评论 -
加油站
加油站描述在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组...原创 2020-03-07 11:31:29 · 189 阅读 · 0 评论 -
矩阵置零
矩阵置0描述给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]思路和代码用一个row[]数组和col[]数组表示某一行某一列需不需要置为0,首先遍历矩阵,若matrix[i][j] == 0...原创 2020-03-07 10:56:22 · 170 阅读 · 0 评论 -
格雷码
格雷码描述格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2思路和代码参考链接https://leetcode-cn.com/problems/gray-cod...原创 2020-03-06 19:39:00 · 119 阅读 · 0 评论 -
爬楼梯
爬楼梯描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶思路和代码典型的动态规划求解,不要用自顶向下的递归,效率会不高,要用自底向上的动态规划。dp[i] = dp[i-1] + dp...原创 2020-03-06 19:22:00 · 88 阅读 · 0 评论