LeetCode
文章平均质量分 78
No_Game_No_Life_
这个作者很懒,什么都没留下…
展开
-
Leetcode 995. K 连续位的最小翻转次数——差分数组
文章目录引入差分数组题解引入题目:995. K 连续位的最小翻转次数内容不做赘述,这道题如果用模拟的方式是会超时的:也就是在循环的过程中,对于K大小的数组,每一位与1取异或。可以看到这样的效率很低,其复杂度为O(KN)。更好的办法是用差分数组。差分数组如果给你一个包含5000万个元素的数组,然后会有频繁区间修改操作,那什么是频繁的区间修改操作呢?比如让第1个数到第1000万个数每个数都加上1,而且这种操作时频繁的。此时你应该怎么做?很容易想到的是,从第1个数开始遍历,一直遍历到第1000万个原创 2021-09-05 14:46:26 · 412 阅读 · 0 评论 -
Leetcode 背包问题汇总
文章目录背包月背包:大小与数量背包月本月是背包月,接连出了好几个背包问题,其难点在于对于问题的建模和分析。比如下面两道题:474. 一和零494. 目标和这两道题的不同点在于:前者是求大小,而后者是求数量。又比如下面这道题:1049. 最后一块石头的重量 II它的解法实际上就是一个典型的求大小的01背包问题——容量有限情况下的问题,而难点在于“建模”。ttodo 硬币又比如背包问题的变种:1449.数位成本和为目标值的最大数字这是无限可拿的完全背包问题,容量有限而可装原创 2021-06-10 16:16:28 · 1807 阅读 · 2 评论 -
Leetcode4.寻找两个正序数组的中位数——每次去掉一半
文章目录引入解法引入题目不再做赘述,参考: 4. 寻找两个正序数组的中位数记得以前做过一个题目,是通过两个PriorityQueue来寻找中位数的例子,其中一个从小到大排序,另一个从大到小排序。而本题的情况则是从两个排序好的数组中找到中位数,当然可以用最暴力的方法通过两个指针找到中位数,这时候的复杂度是O(M+N)。然鹅,题目中提示使用O(log(M+N))的方式来找到这个中位数,毫无疑问是让我们使用二分法来找。所以如何二分呢?解法这道题没什么新奇的解法,主要是考虑边界条件,以及如果使用二分的原创 2021-05-10 14:54:31 · 185 阅读 · 0 评论 -
Leetcode1584. 连接所有点的最小费用——稠密图的最小生成树
文章目录引入构建方式一:Prim算法构建方式二:Kruskal算法本题题解引入最近开始学习Golang了,所以以后的Leetcode题解都用Golang来写。(ps:Golang没有基础的数据结构,如List、Queue、Stack、PriorityQueue等等,所以这个想法可以放弃掉了)上周周赛有这么一道题1584. 连接所有点的最小费用,以前没有遇到过最小生成树的题,并且本题还是稠密图(即一个节点到各个节点都是联通的,反之如果联通的节点树木比较少,称为稀疏图),本题具有代表意义。图的节点之间是原创 2020-09-17 11:47:52 · 397 阅读 · 0 评论 -
Leetcode332. 重新安排行程——欧拉回路解法
文章目录引入Hierholzer 算法其他题目解析引入前些天忙着面试,也不知道是哪一天遇到了解欧拉回路的题:332. 重新安排行程,一直存到了今天正式开始理解和解决,题目是这样的:给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。这道题文字描述了很长,但是可以简单的理解:(仔细体会)给定一个 n 个点 m 条边的图,要求从原创 2020-09-10 08:47:55 · 396 阅读 · 0 评论 -
Leetcode1114.按序打印——JAVA线程协助工具类
文章目录引入解法一:使用信号量SemaphoreSemaphore生产者消费者解法二:倒计时门闩CountDownLatch解法三:管程模型Lock解法四:循环障碍CyclicBarrier解法五:无锁自旋小结引入题目在这儿????。下面我会介绍这道题的多种解法,另外,推荐一本书《Java并发编程 核心方法与框架》,以后有机会会介绍。解法一:使用信号量SemaphoreSemaphore 是一个...原创 2020-02-09 15:32:37 · 420 阅读 · 0 评论 -
Leetcode174. 地下城游戏——动态规划的无后效性
文章目录引入本题解法本题感悟引入今天的每日一题174. 地下城游戏一眼看上去就是使用dp,并且是非常标准的DP场景。我一开始是这样做的:public class Solution { public int calculateMinimumHP(int[][] dungeon) { int M=dungeon.length; int N=dungeon[0].length; int[][] dp=new int[M+1][N+1];原创 2020-07-12 11:26:11 · 385 阅读 · 0 评论 -
Leetcode5435. 并行课程 II
文章目录引入如何建模?引入本周的双周赛最后一题:5435. 并行课程 II,遇到了一个坑,原本以为是一道很简单的题,但是加上了某个条件后,解法完全不一样了。题目是这样的:给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 dependencies 中, dependencies[i] = [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。在一个学期中,你 最多 可以同时上 k 门课,前提是这些课的先修课在之前的学期原创 2020-06-28 10:15:26 · 498 阅读 · 0 评论 -
Leetcode5438. 制作 m 束花所需的最少天数——另类的二分法
文章目录引入二分法题解引入今天周赛遇到这么一道题,5438. 制作 m 束花所需的最少天数:给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3,原创 2020-07-25 11:20:45 · 262 阅读 · 0 评论 -
Leetcode面试题 17.13. 恢复空格——综合题:字典树+dp+倒序思想
文章目录引入字典树题解引入今天终于把面试题 17.13. 恢复空格这道放着好久没做的题给做了,确实做这样一道题要拐很多弯,需要一定量的积累。题目就暂时不放出来了,拿到这道题的第一反应,我也确实想到了字典树(ps:刚才去翻了翻博客日志,居然没有写过字典树相关的介绍,一会在下文我会写上)。使用字典树只是题解里面的一个步骤,看到挨个判断字符串的每个字符是否在字典里的时候,我又想到了回溯算法,也就是遍历的时候,对于每一个字符,去判断是否能从这个字符开始,单独形成一个单词。简单的说,就比如"abcd",字典原创 2020-06-11 10:42:08 · 372 阅读 · 0 评论 -
Leetcode字符串子串查找算法——比KMP更容易理解的Robin-Karp算法
文章目录引入计算滚动Hash子串查找题解引入在刷知乎的之后,看到了一篇名为Robin-Karp的算法,说是比KMP算法更加容易理解,并且也更好实现。我们都知道KMP算法在计算子串的那个数组的时候,理解起来和实现起来感觉上是两个不同的算法,十分的绕,很久不看就忘了。这个算法则更加简单,直接按照原理,就可以写出算法来,其实细说起来,它就是根据暴力算法来改良的,我们知道,暴力算法的复杂度为O(MN),每次移动一个窗口,就要重新依次比较pattern和text的每一位,假设patter长为M,text长为N,原创 2020-06-07 17:06:08 · 953 阅读 · 0 评论 -
Leetcode面试题 17.08. 马戏团人塔——最长递增子序列问题
文章目录引入马戏团人塔问题分析最长递增子序列问题(LIS)解法方法一:动态规划方法二:贪心 + 二分查找马戏团人塔问题解法堆箱子问题解法引入今天做到面经的17.08.马戏团人塔????和面试题 08.13. 堆箱子问题,两个题目很相似,这里会一一介绍。马戏团人塔问题分析首先是马戏团人塔问题,题目要求在2个维度上(即身高 + 体重)同时保持严格递增。那么我们可以先将其中一个维度排好序,以保证在一个维度上保持递增(此时并非严格递增);之后就可以专注于处理另一个维度。具体而言:先根据身高升序排序,原创 2020-05-26 13:13:22 · 632 阅读 · 0 评论 -
LeetCode1449.数位成本和为目标值的最大数字——无限可拿的完全背包问题
文章目录引入题解引入本周周赛毫无疑问第四题又没做起,题目暂时不赘述了,具体可以查看:1449.数位成本和为目标值的最大数字????。首先遇到这道题,看到cost和target两个值,首先能想到的就是01背包问题,但是这道题和背包问题有一些不一样,那就是货物的数量是充足的,拿了价值Vi,重量Wi的货物后,还可以再拿。回忆一下,01背包问题中dp[i][j]表示对于前i个物品,在背包容量为j的时候,最大的价值为dp[i][j]。那么,其状态转移方程如下:如果Wi>j,那么dp[i][j]=d原创 2020-05-25 11:47:46 · 433 阅读 · 0 评论 -
Leetcode面试题 08.11. 硬币——dp的顺序很重要
文章目录引入本题题解引入今天又双叒叕遇到了动态规划题——面试题 08.11. 硬币,什么时候才能突破瓶颈呢?题目链接????本题题解class Solution { public int waysToChange(int n) { int[] dp=new int[n+1]; int[] coin=new int[]{25,10,5,1}; ...原创 2020-04-23 10:26:36 · 256 阅读 · 0 评论 -
Leetcode5375. 恢复数组——哎!又双叒叕是动态规划
文章目录引入动态规划+从后往前 解法引入在本周双周赛里面,又遇到了这样一道题5375. 恢复数组????。乍一看,很简单,几行代码的事情:用我最喜欢的递归。class Solution { int count=0; String s; int k; public int numberOfArrays(String s, int k) { th...原创 2020-04-19 20:45:15 · 232 阅读 · 0 评论 -
Leetcode466.统计重复个数——掐头去尾寻找循环点
文章目录引入本题题解引入每日一题出现了这么一道题:466. 统计重复个数????。题目在此就不做展示了,直接说思路。刚拿到这道题的时候,首先会找:多少个s1才能够拼成一个s2,比如"abba"和"ab",那么一个"abba"里面就包含了"abba";再比如"ab"和"abba",那么三个"ab"即"ababab"就包含了"ababab"。于是就可以用n1除以n2再除以多少个的个数,就能够得到...原创 2020-04-19 16:11:51 · 354 阅读 · 0 评论 -
Leetcode134.加油站——求最大子串和
文章目录引入题解引入今天遇到了这么一道题????在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组...原创 2020-04-07 10:57:15 · 175 阅读 · 0 评论 -
Leetcode1402.做菜顺序——逆序贪心
文章目录引入题解引入在本周的双周赛中,有了这么一道题????:一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。一道菜的 「喜爱时间」系数定义为烹饪这道菜以及之前每道菜所花费的时间乘以这道菜的满意程度,也就是 time[i]*satisfaction[i] 。请你返回做完所有菜 「喜爱时间」总和的最大值为多少。你可以按 任意 顺序...原创 2020-04-06 15:10:14 · 362 阅读 · 0 评论 -
LeetCode5359.最大的团队表现值——小顶堆与PriorityQueue
文章目录引入解法引入在本周周赛中,有这么一道题????:公司有编号为 1 到 n 的 n 个工程师,给你两个数组 speed 和 efficiency ,其中 speed[i] 和 efficiency[i] 分别代表第 i 位工程师的速度和效率。请你返回由最多 k 个工程师组成的 最大团队表现值 ,由于答案可能很大,请你返回结果对 10^9 + 7 取余后的结果。团队表现值 的定...原创 2020-03-16 11:11:00 · 285 阅读 · 0 评论 -
Leetcode437.路径总和 III——利用前缀和的回溯算法
文章目录引入前缀和题解之前在5337.每个元音包含偶数次的最长子字符串——状态压缩DP一文中介绍过状态压缩DP,里面有个思想其实也是利用了前缀和,和本文很相似。引入本题????如下:437.路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二...原创 2020-03-11 11:42:18 · 396 阅读 · 0 评论 -
Leetcode5337.每个元音包含偶数次的最长子字符串——状态压缩DP
文章目录引入题解引入在本周的双周赛中,出现了这么一道题:给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。示例 1:输入:s = “eleetminicoworoep”输出:13解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个...原创 2020-03-09 11:29:34 · 417 阅读 · 0 评论 -
Leetcode221.最大正方形——理解动态规划递归式(状态转移方程)
文章目录引入221.最大正方形 题解引入这道题221.最大正方形是这样的:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4很明显是用动态规划来解,但是动态规划的方程不容易找到。221.最大正方形 题解理解 min(上, 左, 左上) + 1...原创 2020-02-26 11:51:51 · 356 阅读 · 0 评论 -
Leetcode901.股票价格跨度——栈的其他用法
文章目录引入单调栈用栈实现队列引入这里主要想介绍两种栈的用法,分别对应题目901. 股票价格跨度和题目232. 用栈实现队列。具体题目不做赘述。单调栈901.股票价格跨度这道题利用了 单调增栈每次插入新数据时,会一次性将比自己小的元素全部排出 的特性这个特性正好和题目里的 价格小于或等于今天价格的最大连续日 是刚好吻合的换句话说,我们单次插入某值时抛弃的元素组,就是该值前的一段连续...原创 2020-02-26 10:45:38 · 434 阅读 · 0 评论 -
Leetcode239.滑动窗口最大值——双端队列
文章目录引入本题解法引入本题????看起来十分的简单:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 ...原创 2020-02-12 15:44:43 · 281 阅读 · 0 评论 -
Leetcode1349.参加考试的最大学生数——N皇后的状态压缩动态规划算法
文章目录引入压缩状态动态规划解法引入在本周的周赛中,遇到了这么一道题????:1349.参加考试的最大学生数给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 ‘#’ 表示;否则,用 ‘.’ 表示。学生可以看到左侧、右侧、左上、右上这四个方向上紧邻他的学生的答卷,但是看不到直接坐在他前面或者后面的学生的答卷。请你计算并返回该考场可以容纳的一起参加考...原创 2020-02-10 15:41:40 · 627 阅读 · 0 评论 -
Leetcode148.排序链表——排序问题详解
文章目录引入引入原创 2020-02-02 16:37:24 · 312 阅读 · 0 评论 -
Leetcode1333.餐厅过滤器——使用stream流
文章目录引入本题题解引入在上周周赛中,有这么一道题:1333.餐厅过滤器给你一个餐馆信息数组 restaurants,其中 restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息。其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 fal...原创 2020-01-28 15:33:58 · 458 阅读 · 0 评论 -
Leetcode4.寻找两个有序数组的中位数——巧妙使用二分法
文章目录引入Leetcode题解引入本题是这样的:4.寻找两个有序数组的中位数给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:...原创 2020-01-16 11:04:22 · 786 阅读 · 0 评论 -
Leetcode304.二维区域和检索——动态规划之矩阵前缀和
文章目录引入Leetcode题解引入接上文Leetcode10.正则表达式匹配——动态规划之一个模型三个特征。在第17次双周赛的时候,我遇到这么一道题1314. 矩阵区域和。不过在此,我们先讨论该题的解法的经典题型:304.二维区域和检索 - 矩阵不可变给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。...原创 2020-01-15 11:06:35 · 406 阅读 · 0 评论 -
Leetcode10.正则表达式匹配——动态规划之一个模型三个特征
文章目录引入“一个模型三个特征”理论Leetcode题解引入Leetcode中遇到了这样一道题:10.正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。在分析这道题的时候,很容易的就想到去挨个匹配,字符...原创 2020-01-14 11:54:18 · 428 阅读 · 0 评论 -
Leetcode旋转数组——旋转与搜索
文章目录引入旋转数组题解搜索旋转数组题解引入这次遇到的题目如下:189.旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]以及我将额外介绍旋转后的搜索方法:33.搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,...原创 2020-01-11 09:53:43 · 199 阅读 · 0 评论 -
Leetcode200.岛屿数量——并查集
文章目录引入并查集算法细节Leetcode题解引入在leetcode中遇到这样一道题:200.岛屿数量给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:110...原创 2020-01-02 15:18:38 · 1073 阅读 · 1 评论 -
Leetcode169.多数元素——摩尔投票
文章目录引入摩尔投票引入Leetcode上有如下的题:169.多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 :输入: [2,2,1,1,1,2,2]输出: 2乍一看的时候,直接想用HashMap来做,键是元素,值是元素的count。这是第一种方法...原创 2020-01-02 15:51:08 · 226 阅读 · 0 评论 -
Leetcode142.环形链表 II——快慢指针和Floyd算法
文章目录引入Floyd算法Leetcode题解引入142.环形链表 II的题目如下:142.环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head ...原创 2020-01-03 14:51:04 · 339 阅读 · 0 评论 -
Leetcode42.接雨水——双指针法
文章目录引入双指针法引入本题是这样的:42.接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。题目给出的图片一眼就能了然题目要问的是什么。很明显,某一列能装多少水,取决于该列左侧和右侧的高度的最小值。最无脑的做法就是,对每一列求其左右的最大值,也就是用额外的两个O(N)大小的数组空间来存储每一列的最大值和最小值。该方法时间...原创 2020-01-06 15:38:13 · 311 阅读 · 0 评论 -
Leetcode56.合并区间——善用排序与数据结构
文章目录引入题解引入该题是这样的:56.合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [...原创 2020-01-10 11:23:46 · 167 阅读 · 0 评论 -
从0开始的leetCode:3Sum
本题条件很多,主要一个没解决的是数据重复问题:如 -1 2 0 1 -1 1一开始我的代码有[-1 0 1] [0 1 -1] [2 1 1]两种(答案要求排序,排序后两种情况相同),为了消除这种状况,我选择先消除相同项并先排序。就成了 -1 0 1 2 这样虽然防止了[-1 0 1]重复出现,但是少了[1 1 2]这一项。所以我才有了数组使用:lists.contains(...原创 2018-09-10 10:23:08 · 302 阅读 · 0 评论 -
从0开始的leetCode:Median of Two Sorted Arrays
我的解法:(很常规的解法,但是明显不符合题目要求的O(logmn)的复杂度) public double findMedianSortedArrays(int[] nums1, int[] nums2) { int i=0,j=0,k=0; int length=nums1.length+nums2.length; int[] nums...原创 2018-09-06 17:00:10 · 284 阅读 · 0 评论 -
从0开始的leetCode: Longest Substring
我的解法:public int lengthOfLongestSubstring(String s) { int num; int maxsize; ArrayList<Character> arrayList =new ArrayList<>(); if (s.length()>0){//考虑空串...原创 2018-09-06 13:35:48 · 543 阅读 · 0 评论 -
从0开始的leetCode: Add Two Number
我的解法是:class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int i=0; ListNode pre=l1; while (l1!=null){ l1.val=l1.val+l2.val+i; ...原创 2018-09-05 21:27:39 · 315 阅读 · 0 评论