![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
清崎教练
这个作者很懒,什么都没留下…
展开
-
从暴力递归到动态规划进阶
“从0开始做LeetCode”之从暴力递归到动态规划进阶 1.换钱的方法数原创 2020-10-11 14:44:42 · 202 阅读 · 0 评论 -
二叉树进阶
“从0开始做LeetCode”之二叉树进阶 1+2.morris遍历经典遍历:额外空间复杂度:O(h),因为要回到上级节点,压栈,这个栈可以是递归,也可以自己写递归版过程:有左子树,能来到它两次,没有左子树,只能来到它一次在morris遍历中改先序,中序,后序:难先序:中序:后序:只关注能够来到两次的节点,在第二次来到该节点时候,逆序打印左子树右边界,最后单独打印一下整棵树右边界3.平衡搜索二叉树对比hash_map:时间复杂度:O(1)查:时间复杂度:O(h)原创 2020-08-14 17:35:47 · 173 阅读 · 0 评论 -
窗口内最大、最小值,单调栈
“从0开始做LeetCode”之窗口、单调栈 1.窗口用双向链表解决2.窗口的应用:生成窗口最大值数组3.窗口的应用:最大值减去最小值小于或等于num的子数组数量Note:子数组连续暴力解法:最优解:总体思路:往右扩4.单调栈时间复杂度:O(N)找大,从栈底到栈顶,从大到小找小,从栈底到栈顶,从小到大找出右边最近和左边最近比这个数大的数项目 spark、hadoop,造项目,分布式计算5.单调栈应用:构造数组的MaxTree大根堆:时间复杂度:O(N原创 2020-08-11 15:36:04 · 155 阅读 · 0 评论 -
KMP,Manacher,BFPRT
“从0开始做LeetCode”之KMP,Manacher,BFPRT 1.KMP算法next数组子树问题 也用这个方法2.Manacher算法求最大回文子串暴力解法回文半径,回文右边界,回文中心可能性1:iii不在回文有边界内,暴力解后面的可能性拆为3种可能性2:对称点在回文内,对称点回文半径在内,和对称点的回文半径一样可能性3:对称点在回文内,对称点回文半径在外,iii->RRR可能性4:对称点在回文内,对称点回文半径压线,开始的一段不用管,后面暴力试整原创 2020-08-10 20:45:50 · 104 阅读 · 0 评论 -
递归和动态规划常见题目
“从0开始做LeetCode”之递归和动态规划常见题目 1.求n!2.汉诺塔问题复杂度:O(2^n)3.打印一个字符串的全部子序列,包括空字符串子序列!=子串4.打印一个字符串的全部排列进阶:另加要求不要出现重复的排列5.母牛N年总数F(n)=F(n-1)+F(n-3)6.暂时没做这个题暂时没做7.二维数组最小路径和尝试,枚举暴力递归的缺点:重复计算 f(1,1)无后效性问题改动态规划8.数组中的累加和...原创 2020-08-09 13:49:01 · 130 阅读 · 0 评论 -
贪心常见题目
“从0开始做LeetCode”之贪心常见题目 1.前缀树(try-树)·增加前缀树功能2.贪心:N个字符串串起来,怎么最大ab<ba,bc<cb => ac<ca3.贪心:花费最少哈夫曼编码问题尽可能让每一刀下去两边差不多,贪心贪出来贪心策略不用证明4.贪心:利润最多堆,就是优先级队列堆+比较器,生成小根堆,大根堆5.还有一道题,之前讲堆排时候讲过了6.贪心:场次最多按照开始的时间贪心按照持续时间短贪心按照结束的时间贪心原创 2020-08-08 16:46:01 · 207 阅读 · 0 评论 -
并查集常见题目
“从0开始做LeetCode”之并查集常见题目 解决的问题:非常快地 查两个元素是否在一个集合两个元素所在的各自的集合给合并到一起1.认识哈希函数和哈希表2.设计RandomPool结构双哈希3.认识布隆过滤器100亿个url,黑名单 大数据调整哈希函数的个数和开的数组位数决定失误率比特类型的map4.认识一致性哈希服务器设计抗压,负载均衡经典抗压问题:当加机器和减机器,数据需要重新迁移解决:一致性哈希降低数据迁移的代价,同样达到负载均衡哈希域虚拟原创 2020-08-08 13:51:38 · 178 阅读 · 0 评论 -
哈希表常见题目
“从0开始做LeetCode”之哈希表常见题目 1.认识哈希函数和哈希表2.设计RandomPool结构双哈希3.认识布隆过滤器100亿个url,黑名单 大数据调整哈希函数的个数和开的数组位数决定失误率比特类型的map4.认识一致性哈希服务器设计抗压,负载均衡经典抗压问题:当加机器和减机器,数据需要重新迁移解决:一致性哈希降低数据迁移的代价,同样达到负载均衡哈希域虚拟节点技术Note:没听太明白...原创 2020-08-07 18:27:47 · 856 阅读 · 0 评论 -
二叉树常见题目
“从0开始做LeetCode”之二叉树常见题目 1.实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式打印时机——>先序,中序,后序2.用数组结构实现大小固定的队列和栈3.实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作时间复杂度:O(1),可以使用线程的栈结构两个栈:同步进,同步弹4. 如何仅用队列结构实现栈结构?如何仅用栈结构实现队列结构?两个队列两个栈:倒数据5. 猫狗队列6. 转圈打印矩阵额外空间复杂度:O(1)宏观原创 2020-08-05 21:42:01 · 363 阅读 · 0 评论 -
链表常见题目
“从0开始做LeetCode”之常见题目 1.排序后找出相邻两个数的最大值2.用数组结构实现大小固定的队列和栈3.实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作时间复杂度:O(1),可以使用线程的栈结构两个栈:同步进,同步弹4. 如何仅用队列结构实现栈结构?如何仅用栈结构实现队列结构?两个队列两个栈:倒数据5. 猫狗队列6. 转圈打印矩阵额外空间复杂度:O(1)宏观调度旋转90°7. 反转单向和双向链表8. “之”字形打印宏原创 2020-08-05 00:38:46 · 113 阅读 · 0 评论 -
常用排序算法总结
“从0开始做LeetCode”之常用排序算法总结 1.冒泡排序Note:先排最大的时间复杂度:O(n2)O(n^2)O(n2) 空间复杂度:O(1)O(1)O(1)void bubble_sort(vector<int> &nums, int n){ //这里可以传入n,也可以不用 if(nums.empty() || nums.size()<2){ return; } for(int end = nums.size()- 1; end > 0; end-原创 2020-08-04 10:00:34 · 125 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II
“从0开始做LeetCode”之第九题 tag:二分查找——先找有序区间难度:medium假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = [2,5,6,0,0,1,原创 2020-07-23 17:08:00 · 122 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
“从0开始做LeetCode”之第九题 tag:二分查找——左右边界难度:medium给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出原创 2020-07-23 15:53:40 · 88 阅读 · 0 评论 -
LeetCode 69. x的平方根
“从0开始做LeetCode”之第八题 tag:双指针——滑动窗口难度:hard给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimu原创 2020-07-21 19:34:49 · 114 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串
“从0开始做LeetCode”之第七题 tag:双指针——滑动窗口难度:hard给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimu原创 2020-07-05 23:34:49 · 113 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
“从0开始做LeetCode”之第六题 tag:双指针——快慢指针难度:medium给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾原创 2020-07-04 23:55:08 · 138 阅读 · 0 评论 -
LeetCode 88.合并两个有序数组
“从0开始做LeetCode”之第五题 tag:双指针难度:easy给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n =原创 2020-07-03 12:43:33 · 105 阅读 · 0 评论 -
LeetCode 167.两数之和 II - 输入有序数组
“从0开始做LeetCode”之第四题 tag:双指针难度:easy给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释原创 2020-07-02 22:16:44 · 158 阅读 · 0 评论 -
LeetCode 435.无重叠区间
“从0开始做LeetCode”之第三题 tag:贪心算法——区间问题难度:meidum给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释原创 2020-07-01 18:15:01 · 349 阅读 · 0 评论 -
LeetCode 135.分发糖果
“从0开始做LeetCode”之第二题 tag:贪心算法——分配问题难度:hard老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入: [1,2,2]输出原创 2020-06-30 18:28:08 · 125 阅读 · 0 评论 -
LeetCode 455.分发饼干
“从0开始做LeetCode”之第一题tag:贪心算法——分配问题难度:easy假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。原创 2020-06-29 13:15:50 · 114 阅读 · 0 评论