
LeetCode刷题
十一月的嚣张
这个作者很懒,什么都没留下…
展开
-
2021-8-10
8-10题目:39. 组合总和 (回溯)这个题目很典型,但是忘了怎么去做了,需要好好看看原创 2021-08-10 17:02:08 · 162 阅读 · 0 评论 -
2021-08-08
题目:152. 乘积最大子数组https://leetcode-cn.com/problems/maximum-product-subarray/注意的地方:错误代码:class Solution { public int maxProduct(int[] nums) { int n = nums.length; int max[] = new int[n]; int min[] = new int[n];原创 2021-08-08 14:31:37 · 179 阅读 · 0 评论 -
2021-07-11-171. Excel表列序号
171. Excel表列序号进制转换原创 2021-07-11 12:40:24 · 155 阅读 · 0 评论 -
丑数 过
两道题目丑数超级丑数没想到这题还能用DP,第二道处理重复值上需要借鉴思考原创 2021-04-11 23:30:22 · 102 阅读 · 0 评论 -
好题整理1 过
好题整理 1题目560. 和为K的子数组437. 路径总和 III分析这个两个题目的最优解都用到了前缀和的性质,很巧妙原创 2021-03-10 13:52:21 · 93 阅读 · 0 评论 -
1145. 二叉树着色游戏
1145. 二叉树着色游戏题目有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到 n 各不相同。游戏从「一号」玩家开始(「一号」玩家为红色,「二号」玩家为蓝色),最开始时,「一号」玩家从 [1, n] 中取一个值 x(1 <= x <= n);「二号」玩家也从 [1, n] 中取一个值 y(1 <= y <= n)且 y != x。「一号」玩家给值为 x 的节点染上红色,原创 2021-01-21 16:47:06 · 274 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
找到字符串中所有字母异位词转载 2020-12-31 16:40:42 · 94 阅读 · 0 评论 -
15. 三数之和
15. 三数之和题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]分析这个题目的难点在于去重,之前我的做法是:先对于每两个数,求他们的和,存在map里,全部做完之后,遍历原始数组,对于每原创 2020-12-26 23:15:35 · 154 阅读 · 0 评论 -
146. LRU 缓存机制 过
146. LRU 缓存机制题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限原创 2020-11-22 23:07:30 · 142 阅读 · 0 评论 -
222. 完全二叉树的节点个数
222. 完全二叉树的节点个数题目给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入:1/ 2 3/ \ /4 5 6输出: 6思路最直接的思路是统计左子树节点的数量,再统计右子树节点的数量,然后加起来,时间复杂度是O(N)的。但是这不是最优的思路最优的思路是:充分利用原创 2020-11-22 20:49:28 · 261 阅读 · 0 评论 -
题目杂记(二)
题目杂记(二)题目1题目给定一个有序数组arr,从左到右依次表示X轴上从左往右点的位置。给定一个正整数K,返回如果有一根长度为K的绳子,最多能盖住几个点?绳子的边缘点碰到X轴上的点,也算盖住题目2题目3题目题目4题目长度为N的数组arr,一定可以组成N^2个数值对。例如arr = [3,1,2],数值对有(3,3) (3,1) (3,2) (1,3) (1,1) (1,2) (2,3) (2,1) (2,2),也就是任意两个数都有数值对,而且自己和自己也算数值对。数值对怎么排原创 2020-11-15 22:00:07 · 279 阅读 · 0 评论 -
240. 搜索二维矩阵 II 和74. 搜索二维矩阵
240. 搜索二维矩阵 II 和74. 搜索二维矩阵原创 2020-11-15 21:56:29 · 238 阅读 · 0 评论 -
1139. 最大的以 1 为边界的正方形
1139. 最大的以 1 为边界的正方形原创 2020-11-15 21:53:36 · 193 阅读 · 0 评论 -
32. 最长有效括号
32. 最长有效括号原创 2020-11-15 21:52:21 · 104 阅读 · 0 评论 -
347. 前 K 个高频元素
347. 前 K 个高频元素题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。思路有一种直接的思路是,统计每个数字出现的次数,然原创 2020-11-15 11:08:24 · 165 阅读 · 0 评论 -
小技巧
小技巧记录一点学来的小技巧。笔试的算法题,都是在单机上跑的,一般来说,对于java,给的时间是2-4ms,大概是10^8到10 ^9个常数操作的时间。对于一道题,一般来说会有输入规模,假设想用的算法是O(N ^2)的,而N是10 ^6,那么,很可能会超时的。所以可能需要时间复杂度更小的算法。这应该算是一个提示吧。...原创 2020-11-12 23:51:58 · 150 阅读 · 0 评论 -
517. 超级洗衣机
517. 超级洗衣机题目假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。给定一个非负整数数组代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的最少的操作步数。如果不能使每台洗衣机中衣物的数量相等,则返回 -1。示例 1:输入: [1,0,5]输出: 3解释:第一步: 1 0 &l原创 2020-11-12 23:47:13 · 150 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器原创 2020-11-12 23:26:08 · 92 阅读 · 0 评论 -
数组累加和问题三连
数组累加和问题三连第一题题目:给定一个全是正数的数组arr,一个目标数字target,求数组中满足和为target的最长子数组的长度思路:这是很简单的题目,用双指针和窗口就可以解决。具体见代码代码: public static int getMaxLength(int[] arr, int K) { if (arr == null || arr.length == 0 || K <= 0) { return 0; } int left = 0; int right原创 2020-11-09 20:33:15 · 877 阅读 · 0 评论 -
53. 最大子序和与152. 乘积最大子数组
53. 最大子序和与152. 乘积最大子数组这两道题有相似之处,所以放在了一起记录题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路可以用动态规划来做,设数组元素f[i]表示包含第i个元素的最大和的连续子数组,那么转移方程是f[i]=max(f[i−1]+A[i],A[i])f[i] = max(f[原创 2020-11-07 23:40:24 · 129 阅读 · 0 评论 -
120. 三角形最小路径和
120. 三角形最小路径和题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。思路这题是典型的动态规划题目,定义数组f[i][j]表示第i层第j个元素为终点时的路径和,转移方程为f[i][j]=Math.min(f[i−1][j−1],f[i−1][j])+A[i][原创 2020-11-07 20:48:18 · 83 阅读 · 0 评论 -
接雨水系列题目
接雨水系列题目leetcode上的两道接雨水的题目,一道是基础版的,另一道是进阶版的42. 接雨水407. 接雨水 II下面来看具体题目42. 接雨水题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)原创 2020-11-07 20:27:05 · 474 阅读 · 0 评论 -
1458. 两个子序列的最大点积 过
1458. 两个子序列的最大点积题目给你两个数组 nums1 和 nums2 。请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,[2,3,5] 是 [1,2,3,4,5] 的一个子序列而 [1,5,3] 不是。示例 1:输入:nums1 = [2,1,-2,5], nums2 = [3,0,-6]输出:18解释:从 nums1 中得到子序列 [原创 2020-11-01 23:59:54 · 104 阅读 · 0 评论 -
139. 单词拆分
139. 单词拆分题目给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。思路定义dp[i]表示前i个字符组成的字符串是否可以被拆分,原创 2020-11-01 23:42:43 · 117 阅读 · 0 评论 -
381. O(1) 时间插入、删除和获取随机元素 - 允许重复
381. O(1) 时间插入、删除和获取随机元素 - 允许重复题目设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构。注意: 允许出现重复元素。insert(val):向集合中插入元素 val。remove(val):当 val 存在时,从集合中移除一个 val。getRandom:从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈线性相关。示例:// 初始化一个空的集合。RandomizedCollection collection = new原创 2020-10-31 10:35:08 · 102 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历相关题目94. 二叉树的中序遍历原创 2020-10-29 11:08:50 · 82 阅读 · 0 评论 -
72. 编辑距离
72. 编辑距离原创 2020-10-29 11:07:01 · 143 阅读 · 0 评论 -
343. 整数拆分
343. 整数拆分原创 2020-10-29 11:05:51 · 91 阅读 · 0 评论 -
1105. 填充书架
1105. 填充书架原创 2020-10-29 11:05:13 · 100 阅读 · 0 评论 -
647. 回文子串
647. 回文子串原创 2020-10-29 11:04:06 · 76 阅读 · 0 评论 -
516. 最长回文子序列 VS 5. 最长回文子串
516. 最长回文子序列 VS 5. 最长回文子串原创 2020-10-29 11:03:29 · 82 阅读 · 0 评论 -
115. 不同的子序列
115. 不同的子序列原创 2020-10-29 11:00:16 · 70 阅读 · 0 评论 -
1024. 视频拼接
1024. 视频拼接原创 2020-10-29 10:59:08 · 100283 阅读 · 0 评论 -
312. 戳气球
312. 戳气球原创 2020-10-29 10:58:32 · 174 阅读 · 1 评论 -
87. 扰乱字符串
87. 扰乱字符串原创 2020-10-29 10:57:57 · 94 阅读 · 0 评论 -
44. 通配符匹配
44. 通配符匹配题目给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s =原创 2020-10-24 21:23:06 · 286 阅读 · 0 评论 -
10. 正则表达式匹配
10. 正则表达式匹配题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。思路定义f[i][j]表示s的前i个元素组成的字符串,是否可以被p的前j个元素组成的字符串识别。接下来定义转移过程:当s[i-1]=原创 2020-10-24 21:13:59 · 189 阅读 · 0 评论 -
面试题 08.11. 硬币 过
面试题 08.11. 硬币题目硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入: n = 5输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1思路和零钱兑换 II的思路是一样的,或者说基本上就是一道题代码 public int waysToChange(int n) { int f[][] = new int[5][n+1];原创 2020-10-22 22:42:45 · 128 阅读 · 0 评论 -
322. 零钱兑换 过
322. 零钱兑换题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1思路定义f[i]表示当金额为i时,所需要的最小硬币的个数。以上面例子中的数据为例,转移方程为f[i]=min{f[i−1]+1,f[i−2]+1,f[i−5原创 2020-10-22 22:32:27 · 109 阅读 · 0 评论 -
437. 书籍复印
437. 书籍复印题目描述给定 n 本书, 第 i 本书的页数为 pages[i]. 现在有 k 个人来复印这些书籍, 而每个人只能复印编号连续的一段的书, 比如一个人可以复印 pages[0], pages[1], pages[2], 但是不可以只复印 pages[0], pages[2], pages[3] 而不复印 pages[1].所有人复印的速度是一样的, 复印一页需要花费一分钟, 并且所有人同时开始复印. 怎样分配这 k 个人的任务, 使得这 n 本书能够被尽快复印完?返回完成复印任务原创 2020-10-22 13:50:54 · 421 阅读 · 0 评论