栈,队列,堆
栈,队列,堆
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】1019. 链表中的下一个更大节点---倒序实现栈
给定一个长度为 n 的链表 head 对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。 返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点,设置 answer[i] = 0 。原创 2023-04-10 19:00:00 · 345 阅读 · 0 评论 -
【Java|golang】1792. 最大平均通过率---封装最小堆
一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。原创 2023-02-19 21:05:21 · 439 阅读 · 0 评论 -
【Java|golang】2325. 解密消息
给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下:原创 2023-02-01 20:35:54 · 287 阅读 · 0 评论 -
【golang】1805. 字符串中不同整数的数目
给你一个字符串 word ,该字符串由数字和小写英文字母组成。原创 2022-12-06 13:33:43 · 66 阅读 · 0 评论 -
【java|golang】856. 括号的分数
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:原创 2022-10-10 11:14:08 · 120 阅读 · 0 评论 -
【Java|golang】1475. 商品折扣后的最终价格---使用栈
给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。原创 2022-09-01 11:21:01 · 202 阅读 · 0 评论 -
【Java】1161. 最大层内元素和----层次遍历
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。原创 2022-08-03 13:39:00 · 82 阅读 · 0 评论 -
【Java|golang】1331. 数组序号转换----踩坑了踩坑了踩坑了
给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。原创 2022-07-28 11:26:13 · 114 阅读 · 0 评论 -
【Java|golang】735. 行星碰撞---使用堆
给定一个整数数组 asteroids,表示在同一行的行星。原创 2022-07-14 14:17:48 · 93 阅读 · 0 评论 -
【Java】1089. 复写零---使用队列,时间复杂度O(N)。
给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。 要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。 示例 1: 输入:[1,0,2,3,0,4,5,0] 输出:null 解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4] 示例 2: 输入:[1,2,3] 输出:null 解释:调用函数后,输入的数组将被修改为:[1,2,3] 提示: 1 <= arr.length原创 2022-01-20 17:30:09 · 82 阅读 · 0 评论 -
【Java】373. 查找和最小的K对数字---使用优先级队列,避免踩坑。
给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1: 输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3 输出: [1,2],[1,4],[1,6] 解释: 返回序列中的前 3 对数: [1,2],[1,4],[1,6],[7,2],[7,4],[11原创 2022-01-14 09:39:47 · 181 阅读 · 0 评论 -
【Java】496. 下一个更大元素 I---使用stack栈和map集合,时间复杂度O(N),超详细教程
给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。 示例 1: 输入: nums1 = [4,1,2], nums2 = [1,3,4,2]. 输出: [-1,3,-1] 解释: 对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更原创 2021-11-17 18:43:48 · 96 阅读 · 0 评论 -
【Java】502. IPO---使用最小堆PriorityQueue来求符合题意的最大元素以及贪心算法,快速解决问题!!!
假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。 给你 n 个项目。对于每个项目 i ,它都有一个纯利润 profits[i] ,和启动该项目需要的最小资本 capital[i] 。 最初,你的资本为 w 。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。 总而言之,从原创 2021-09-08 21:42:19 · 111 阅读 · 0 评论 -
【Java】295. 数据流的中位数---定义两个堆,一个为最小堆,一个为最大堆,堆顶为中位数!!!
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。 示例: addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) findMedian()原创 2021-08-28 22:53:49 · 122 阅读 · 0 评论 -
【Java】155. 最小栈---史上最详细详解,无需定义多余的栈!!!
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例: 输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”] [[],[-2],[0],[-3],[],[],[],[]] 输出: [null,null,null,null,-3,原创 2021-08-18 11:27:35 · 191 阅读 · 0 评论 -
【Java】313. 超级丑数---使用最大堆PriorityQueue,解决问题!!!
超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。 给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。 题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。 示例 1: 输入:n = 12, primes = [2,7,13,19] 输出:32 解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。 示例 2: 输入:原创 2021-08-09 08:57:46 · 119 阅读 · 0 评论 -
【Java】752. 打开转盘锁---使用层次遍历,查询最短路径!!!
你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。 锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。 列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。 字符串 target 代表可以解锁的数字,你需原创 2021-06-27 18:00:44 · 82 阅读 · 0 评论 -
【java】1190. 反转每对括号间的子串---用栈!!!
给出一个字符串 s(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。 注意,您的结果中 不应 包含任何括号。 示例 1: 输入:s = “(abcd)” 输出:“dcba” 示例 2: 输入:s = “(u(love)i)” 输出:“iloveu” 示例 3: 输入:s = “(ed(et(oc))el)” 输出:“leetcode” 示例 4: 输入:s = “a(bcdefghijkl(mno)p)q” 输出:“apmnolkjihgfedcb原创 2021-05-26 19:41:55 · 83 阅读 · 0 评论 -
【java】面试题 03.06. 动物收容所---学会队列的实现,避免踩坑!!!
动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。 enqueue方法有一个animal参数,animal[0]原创 2021-04-29 16:53:25 · 238 阅读 · 0 评论 -
【面试题 03.05. 栈排序】---用两个栈实现栈内元素排序,避免踩坑!!!
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。 示例1: 输入: [“SortedStack”, “push”, “push”, “peek”, “pop”, “peek”] [[], [1], [2], [], [], []] 输出: [null,null,null,1,null,2] 示例2: 输入: [“Sorted原创 2021-04-29 11:27:01 · 262 阅读 · 0 评论 -
【java】面试题 03.04. 化栈为队---两个栈实现一个队列,避免踩坑!!!
实现一个MyQueue类,该类用两个栈来实现一个队列。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。 你所使用的语言也许不原创 2021-04-29 11:06:32 · 84 阅读 · 0 评论 -
【java】面试题 03.03. 堆盘子---使用集合,避免踩坑!!!
堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。 当某个栈为空时,应当删除原创 2021-04-28 21:12:04 · 127 阅读 · 0 评论 -
【java】面试题 03.02. 栈的最小值---数组实现栈。避免踩坑!!!
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); -->原创 2021-04-28 09:45:06 · 79 阅读 · 0 评论 -
【java】面试题 03.01. 三合一---注意数组的下边,继续加油!!!
三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数,代表每个栈的大小。 示例1: 输入: [“TripleInOne”, “push”, “push”, “pop”, “pop”, “pop”, “isEmpty”] [[1], [0, 1], [0, 2], [0],原创 2021-04-27 16:33:36 · 98 阅读 · 0 评论 -
【java】1006. 笨阶乘---学会队列,时间复杂度O(N),踩坑的一天天!!!
通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。 相反,我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。 例如,clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1。然而,这些运算仍然使用通常的算术运算顺序:我们在任何原创 2021-04-01 10:46:45 · 106 阅读 · 2 评论 -
【java】456. 132模式---时间复杂度O(N^2)!!!
给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。 注意:n 的值小于15000。 示例1: 输入: [1, 2, 3, 4] 输出: False 解释: 序列中不存在132模式的子序列。 示例 2: 输入: [3, 1, 4, 2] 输出: True 解释: 序列中有 1 个132模式的子序列原创 2021-03-24 09:12:21 · 92 阅读 · 0 评论