LeetCode
文章平均质量分 52
📚LeetCode[刷题记录] 🍭🍭🍭
心一QAQ
总是学不会,再聪明一点!
展开
-
[动态规划] LeetCode 188. 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:k = 2, prices = [2,4,1]输出:2解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2原创 2021-03-30 21:38:05 · 97 阅读 · 0 评论 -
[动态规划] LeetCode 123. 买卖股票的最佳时机 III
123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格原创 2021-03-30 21:12:10 · 154 阅读 · 0 评论 -
[动态规划 | 贪心] LeetCode 122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格原创 2021-03-30 16:19:10 · 129 阅读 · 0 评论 -
[动态规划 | 贪心] LeetCode 121. 买卖股票的最佳时机
121. 买卖股票的最佳时机给定一个数组 prices,它的第i个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5原创 2021-03-30 15:30:42 · 129 阅读 · 0 评论 -
[动态规划 | LIS | 二分] LeetCode 354. 俄罗斯套娃信封问题
300. 最长递增子序列给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允许旋转信封。示例 1:输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]输出:3解释:最多信封的个数为原创 2021-03-08 11:27:31 · 245 阅读 · 1 评论 -
[单调栈] LeetCode 739. 每日温度
739. 每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100] 范围内的整数。解题思路(单调栈)维护原创 2021-03-08 10:25:47 · 139 阅读 · 0 评论 -
[0-1背包] LeetCode 416. 分割等和子集
416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.提示:每个数组中的元素不会超过 100数组的大小不会超过 200解题思路(动态规划 0-1背包)题目要求分割两个子集的元素和相等原创 2021-03-03 22:50:15 · 207 阅读 · 2 评论 -
[0-1背包] LeetCode 494. 目标和
494. 目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和-。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种原创 2021-03-03 22:30:40 · 215 阅读 · 1 评论 -
[动态规划 | 二分 + 贪心] LeetCode 300. 最长递增子序列
300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums原创 2021-03-03 16:58:32 · 206 阅读 · 1 评论 -
[完全背包] LeetCode 518. 零钱兑换 II
518. 零钱兑换 II给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coi原创 2021-03-03 16:04:59 · 174 阅读 · 1 评论 -
[完全背包] LeetCode 322. 零钱兑换
322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0原创 2021-03-03 15:38:37 · 151 阅读 · 1 评论 -
[暴力 | 双指针 | 单调栈] LeetCode 42. 接雨水
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 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n原创 2021-02-19 20:20:50 · 117 阅读 · 0 评论 -
[栈与队列] LeetCode 225. 用队列实现栈
225. 用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop原创 2021-02-18 19:50:59 · 163 阅读 · 0 评论 -
[栈与队列] LeetCode 232. 用栈实现队列
232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop原创 2021-02-18 14:07:54 · 161 阅读 · 2 评论 -
[栈] LeetCode 155. 最小栈
155. 最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例 1:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,nu原创 2021-02-18 13:13:31 · 81 阅读 · 0 评论 -
[优先级队列] LeetCode 703. 数据流中的第 K 大元素
703. 数据流中的第 K 大元素设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。示例 1:输入:["KthLargest", "add", "add", "add", "add",原创 2021-02-11 12:28:51 · 138 阅读 · 0 评论 -
[滑动窗口] LeetCode 76. 最小覆盖子串
76. 最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a"提示:1 <= s.length, t.length <= 10^5s 和 t 由英文字原创 2021-02-10 23:02:08 · 192 阅读 · 3 评论 -
[滑动窗口] LeetCode 567. 字符串的排列
567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False提示:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间解题思路(滑动原创 2021-02-10 10:48:03 · 247 阅读 · 0 评论 -
[动态规划] LeetCode 516. 最长回文子序列
516. 最长回文子序列给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入: "bbbab"输出: 4解释: 一个可能的最长回文子序列为 "bbbb"。示例 2:输入: "cbbd"输出: 2解释: 一个可能的最长回文子序列为 "bb"。提示:1 <= s.length <= 1000s 只包含小写英文字母解题思路(动态规划)状态表示:dp[i][j]表示第i 个字符到第j个字原创 2021-02-05 20:59:37 · 137 阅读 · 0 评论 -
[滑动窗口] LeetCode 3. 无重复字符的最长子串
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是原创 2021-02-05 13:14:18 · 147 阅读 · 0 评论 -
[动态规划] LeetCode 53. 最大子序和
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-10000原创 2021-02-04 13:55:15 · 137 阅读 · 0 评论 -
LeetCode 18. 四数之和
18. 四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组示例 1:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0原创 2020-12-17 15:37:00 · 86 阅读 · 0 评论 -
LeetCode 15. 三数之和
15. 三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]class Solution {public: vector<vector<int>原创 2020-12-17 15:11:33 · 95 阅读 · 1 评论 -
LeetCode 1167. 连接棒材的最低费用 (优先级队列 + 哈夫曼编码思想)
1167. 连接棒材的最低费用为了装修新房,你需要加工一些长度为正整数的棒材 sticks。如果要将长度分别为 X和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用。 由于施工需要,你必须将所有棒材连接成一根。返回你把所有棒材 sticks 连成一根所需要的最低费用。注意你可以任意选择棒材连接的顺序。示例 1:输入:sticks = [2,4,3]输出:14解释:先将 2 和 3 连接成 5,花费 5;再将 5 和 4 连接成 9;总花费为 14。示例 2:输入:sti原创 2020-11-10 16:43:06 · 268 阅读 · 0 评论 -
LeetCode 984. 不含 AAA 或 BBB 的字符串
984. 不含 AAA 或 BBB 的字符串给定两个整数 A 和 B,返回任意字符串 S,要求满足:S 的长度为 A + B,且正好包含 A 个'a' 字母与 B 个 'b' 字母;子串 'aaa'没有出现在 S 中;子串 'bbb'没有出现在 S 中。示例 1:输入:A = 1, B = 2输出:“abb”解释:“abb”, “bab” 和 “bba” 都是正确答案。示例 2:输入:A = 4, B = 1输出:“aabaa”提示:0 <= A <原创 2020-11-06 16:29:48 · 101 阅读 · 0 评论 -
LeetCode 1405. 最长快乐字符串
1405. 最长快乐字符串如果字符串中不含有任何 ‘aaa’,‘bbb’ 或 ‘ccc’ 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 ‘a’、b 个字母 ‘b’、c 个字母 ‘c’ 。s 中只含有 ‘a’、‘b’ 、‘c’ 三种字母。如果不存在这样的字符串 s ,请返回一个空字符串 “”。示例 1:输入:a = 1, b = 1,原创 2020-11-06 10:53:48 · 129 阅读 · 0 评论 -
LeetCode 1338. 数组大小减半
1338. 数组大小减半给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。返回 至少 能删除数组中的一半整数的整数集合的最小大小。示例1:输入:arr = [3,3,3,3,5,5,5,2,2,7]输出:2解释:选择 {3,7} 使得结果数组为 [5,5,5,2,2]、长度为 5(原数组长度的一半)。大小为 2 的可行集合有 {3,5},{3,2},{5,2}。选择 {2,7} 是不可行的,它的结果数组为 [3,3,3,3,5,5,5],新数组长度原创 2020-11-06 10:20:10 · 194 阅读 · 0 评论 -
LeetCode 1497. 检查数组对是否可以被 k 整除
1497. 检查数组对是否可以被 k 整除给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例2:输入:arr = [1,原创 2020-11-05 11:27:50 · 174 阅读 · 0 评论 -
LeetCode 56. 合并区间
57. 插入区间给出一个区间的集合,请合并所有重叠的区间。示例1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。提示:intervals[i][0] <原创 2020-11-05 10:10:00 · 73 阅读 · 0 评论 -
LeetCode 57. 插入区间
57. 插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10]原创 2020-11-05 10:00:17 · 140 阅读 · 0 评论 -
LeetCode 1288. 删除被覆盖区间
1288. 删除被覆盖区间给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。在完成所有删除操作后,请你返回列表中剩余区间的数目。示例:输入:intervals = [[1,4],[3,6],[2,8]]输出:2解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。提示:1 <= intervals.length <= 10000 <原创 2020-11-04 00:04:47 · 94 阅读 · 0 评论 -
LeetCode 802. 找到最终的安全状态(逆序建图+拓扑排序)
802. 找到最终的安全状态在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K, 无论选择从哪里开始行走, 我们走了不到 K 步后必能停止在一个终点。哪些节点最终是安全的? 结果返回一个有序的数组。该有向图有 N 个节点,标签为 0, 1, …, N-1, 其中 N 是 graph 的节点数. 图以以下的原创 2020-10-20 19:35:27 · 101 阅读 · 0 评论 -
LeetCode 401. 二进制手表(二进制枚举)
401. 二进制手表二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,上面的二进制手表读取 “3:25”。给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。示例 :输入: n = 1返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]原创 2020-10-13 20:35:32 · 309 阅读 · 0 评论 -
LeetCode 1588. 所有奇数长度子数组的和
1588. 所有奇数长度子数组的和给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。示例 1:输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,5] = 11[2,5,3] = 10[1,4,2,5,3] = 15我们将所有值原创 2020-09-21 22:04:32 · 266 阅读 · 0 评论 -
LeetCode 525. 连续数组
525. 连续数组给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。示例 1:输入: [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。思路:前缀和+哈希表 (1)首先对原数组做预处理,将所有的0都变为-1,原问题 "含有相同数量的 0 和 1 的连续数组" 就等价为 "元素值总和为0的原创 2020-09-21 16:37:20 · 269 阅读 · 0 评论 -
Leetcode 1004. 最大连续1的个数 III
思路: 双指针 + 滑动窗口 (始终要维护窗口内的0的个数小于等于k) (1)[left,right] 表示窗口,移动right 遍历数组;(2)A[right] == 1 时,++right;(3)A[right] == 0 时,0的数量小于K时,++right;(4)A[right] == 0 时,0的数量等于K时,为了容纳 right 处的0,left 移动过一个0的位置时,才可以容纳下right 处的0。代码: class Solution {public:原创 2020-09-18 20:20:48 · 80 阅读 · 0 评论 -
LeetCode 110. 平衡二叉树
**题目:判断一棵二叉树是否为平衡二叉树。所谓的平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。**容易被大家忽视的一点:平衡二叉树(AVL)一定是一棵二叉搜索树(BST)...原创 2020-02-07 13:05:06 · 339 阅读 · 0 评论 -
Leetcode 141. 环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true...原创 2020-02-06 22:45:30 · 94 阅读 · 0 评论 -
LeetCode 232. 用栈实现队列
由于栈只能在栈顶入栈和出栈,而队列需要在队头出队,队尾入队,所以我们采用双栈来模拟队列。 下面我们来简单描述一下整个算法的过程:1、定义两个栈S1和S2;(其中S1用来入队,S2用来出队)2、入队:直接压入到S1中即可;3、出队:如果S2为空,则把S1中的所有元素全部弹出并压入到S2中,再弹出S2的栈顶元素;如果S2不为空,则把S2中的栈顶元素直接弹出。此时直接将S2的栈顶...原创 2020-01-30 20:13:19 · 219 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点
问题描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路:采用快慢指针的方法来处理本题,定义一个fast指针和一个slow指针,一开始我们让fast和slow都指向链表的head,然后让fas...原创 2020-01-21 00:55:51 · 500 阅读 · 0 评论