LeetCode
文章平均质量分 64
凌乱533
但行好事,莫问前程;但问耕耘,莫问收获;
展开
-
KMP算法
【参考资料】关于KMP算法,大家可以查阅博客园的这篇文章:阮一峰:字符串匹配的KMP算法这篇解释文章相当简明,当然july的这篇文章也可以读一读:六之续、由KMP算法谈到BM算法【算法原理】这里抄录第一篇参考资料的例子:下面,我用自己的语言,试图写一篇比较好懂的 KMP 算法解释。 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2..转载 2021-12-23 22:56:51 · 80 阅读 · 0 评论 -
leetcode面试题 16.25. LRU 缓存 LinkedHashMap + 哈希表与单链表 + 哈希表与双链表
解题思路最先想到的是哈希表加单链表的方式:由于get和put都视为是一次使用,所以在get和put之后都要将节点移动到链表的最前面(最前面的表示最近一次使用的,显然最后面的一个就是要被淘汰的一个)哈希表中记录的是key-value值,链表上只存放key值即可,不断地调整链表上的key的排列顺序即可实现最近最久未使用的排序效果。这种做法问题挺多的,一个是map中没有存放key对应的链表节点,导致在寻找链表上的节点时需要顺序遍历链表,这导致我写的程序 花费300多ms...改进的办法就是map中存放对原创 2021-12-23 22:54:54 · 393 阅读 · 0 评论 -
Java HashMap源码分析
、HashMap的底层实现原理。以jdk 7为例******** HashMap map = new HashMap();* 在实例化以后,底层创建了长度为16的一维数组Entry[] table.* ...可能已经执行过多次put...* map.put(key1,value1):* 首先,调用key1所在类的hashCode()方法计算key1哈希值,此哈希值经过某种计算以后,得到在Entry数组中的存放位置* 如果此位置上的数据.原创 2021-12-21 23:06:55 · 550 阅读 · 0 评论 -
LeetCode 42.接雨水 平凡解法+DP
解题思路平凡解法:感觉这个题的难点在于理解题意,找出具体位置上的雨水是如何计算得出的就好办了,显然一个位置所能存放雨水的值为其两边的最大的值的较小值减去在该位置的柱子长度既可以求得。那么遍历所有的位置,并在遍历的同时求某个位置上的左边最大值和其右边最大值既可以求得该位置的储水量。求和即可得到答案。整体时间复杂度为O(n2)。动态规划:既然要求所有位置的左边最大值,那么我们可以采用一个dp数组来记录每个位置上的左边最大值,遍历求这个leftMax[]的值即可,每个位置只需要对比当前位置的高度和前一个原创 2021-10-10 11:13:49 · 106 阅读 · 0 评论 -
LeetCode 139. 单词拆分 DFS / DP java
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordDict .原创 2021-10-09 17:46:33 · 110 阅读 · 0 评论 -
650. 只有两个键的键盘 动态规划 DFS
最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字n ,你需要使用最少的操作次数,在记事本上输出 恰好n个 'A' 。返回能够打印出n个 'A' 的最少操作次数。示例 1:输入:3输出:3解释:最初, 只有一个字符 'A'。第 1 步, 使用 Copy All 操作。第 2 步, 使用 Paste 操作来获得...原创 2021-09-19 10:22:13 · 87 阅读 · 0 评论 -
Leetcode 502
502. IPO难度困难156收藏分享切换为英文接收动态反馈假设 力扣(LeetCode)即将开始IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多k个不同的项目。帮助 力扣 设计完成最多k个不同项目后得到最大总资本的方式。给你n个项目。对于每个项目i,它都有一个纯利润profits[i],和启动该项目需要的最小资本capital[i]。最初,你的资本为w。当你完成...原创 2021-09-08 15:55:33 · 111 阅读 · 0 评论 -
Leetcode 746. 使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入:cos...原创 2021-09-03 15:40:40 · 81 阅读 · 0 评论 -
Leetcode 70.爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶分析:把问题拆解缩小化,想一下一二三阶楼梯的话有几种方法,显然一节楼...原创 2021-09-03 15:01:26 · 92 阅读 · 0 评论 -
LeetCode 321. 拼接最大数 单调栈解题
去除重复字母(困难)拼接最大数(困难)移掉 K 位数字(中等)不同字符的最小子序列(中等)这四道题都可以使用单调栈的思想来解决, 单调栈即为栈中元素为单调递增或者单调递减,而且在构建栈的时候可以保持原数组中的元素相对位置。其中单调性的保证是一个动态调整的过程,即当前插入元素时需要向前找是否影响了前面的元素结构,如果有影响则需要在前面的栈中弹出受到影响的元素。这四道题中最难的是321,它涉及了两个数组,需要分别在两个数组中构建最大子序列,然后想办法把这两个序列拼接成一个。拼接最大数给定长度分别.原创 2020-12-03 11:44:22 · 241 阅读 · 0 评论 -
单调栈 解决删除某些字符问题
待更新原创 2020-12-02 23:40:59 · 108 阅读 · 0 评论 -
332. 重新安排行程 java Priorityqueue
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前所有的机场都用三个大写字母表示(机场代码)。假定所有机票至少存在一种合理的行程。示例 1:输入: [.原创 2020-08-28 10:45:57 · 151 阅读 · 0 评论 -
java 169. 多数元素
摩尔投票法:核心就是对拼消耗。玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。最后能剩下的必定是自己人。给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非..原创 2020-08-26 14:57:33 · 311 阅读 · 2 评论 -
LeetCode 287. 寻找重复数 抽屉原理
给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:1不能更改原数组(假设数组是只读的)。2只能使用额外的 O(1) 的空间。3时间复杂度小于 O(n2) 。4数组中只有一个重复的数字,但它可能不止重复出现一次。来源:力扣(LeetCode)链接:h...原创 2020-08-25 18:14:15 · 311 阅读 · 0 评论