Leetcode
文章平均质量分 86
一只黑猩猩
这个作者很懒,什么都没留下…
展开
-
二叉堆的应用:优先队列和堆排序(解释+java代码)
文章目录一、二叉堆二、相关操作2.1 插入节点2.2 删除节点2.3 构建二叉堆三、优先队列四、堆排序五、其余补充学习自书籍——《小灰的算法之旅》~一、二叉堆二叉堆本质上是一种完全二叉树,分为大根堆和小根堆两类:大根堆:任何一个父结点的值都大于或等于它左、右孩子结点的值小根堆:任何一个父结点的值都小于或等于它左、右孩子结点的值二叉堆的根结点叫做堆顶,因此,大根堆的堆顶是整个堆中的最大元素、小根堆的堆顶是整个堆中的最小元素。应用:堆排序、优先队列。二、相关操作2.1 插入节点当原创 2021-04-24 15:49:08 · 593 阅读 · 3 评论 -
Leetcode(435、445贪心篇)
保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。 ——贪心Leetcode 445题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩.原创 2020-06-01 21:29:55 · 282 阅读 · 0 评论 -
滑动窗口(最大相同字串,Leetcode209连续子数组)
当输出或比较的结果在原数据结构中是连续排列的时候,可以使用滑动窗口算法求解。最大相同子串题目描述:获取两个字符串中最大相同子串。举例:String str1 = “abcwerthello1yuiodefabcdef”;String str2 = “cvhello1bnabcdefm”;输出:[hello1, abcdef]思路:滑动窗口的应用之一。1.因题目未说明字符串长度大小关系,故需要手动判断两个字符串孰长孰短,以选择出长度较短的字符串进行操作;2.因匹配结果可能包含多.原创 2020-05-31 22:33:50 · 869 阅读 · 0 评论 -
Leetcode(524最长子序列、142链表环入口)
Leetcode 524题目描述:给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 :输入:s = "abpcplea", d = ["a","b","c"]输出: "a"思路:问题求解最长子序列。与KMP字符串匹配所解问题不同,此题未要求匹配的字串连续。使用双指针思想,一个指针用以遍历母串,一个指针用以遍历子串。因未要求连续,则在遍历过程中原创 2020-05-28 23:14:25 · 276 阅读 · 0 评论 -
Leetcode(680回文串、88归并、141快慢指针)
Leetcode 680题目描述:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例一:输入: "aba"输出: True示例二:输入: "abca"输出: True解释: 你可以删除c字符。思路:双指针思想,分别从字符串头和尾进行依次遍历和比较。增设删除标记判断是否使用过删除机会,遇到不等情况,则先判断删除标记,后选择删除后继续遍历或者返回不能成为回文字符串的结论。踩坑点:有一种情况:两个元素不相等时,且无论删除左边元素或是删除右边元素,都满足可以继续遍原创 2020-05-27 22:48:33 · 175 阅读 · 0 评论 -
Leetcode(167、633、345双指针篇)
Leetcode 167题目描述:在有序数组中找出两个数,使它们的和为 target。Input: numbers={2, 7, 11, 15}, target=9Output: index1=1, index2=2思路:1.暴力。两层for循环解决问题,时间复杂度为O(n^2);2.双指针思想。建立两个指针i和j分别指向数组中较小的元素和较大的元素,分别从正向和反向进行遍历。因其为有序数组,值从小到大排列,故有以下三种情况:当前指针所指两个值的和大于期望值,则需要降低和值,j左移即原创 2020-05-25 23:19:52 · 190 阅读 · 0 评论 -
最大公约数和最小公倍数巧妙计算
最大公约数和最小公倍数最大公约数通过递归的方式求解,原理是辗转相除法。最小公倍数等于两数之积除以最大公约数。注意递归出口。 public static void main(String[] args) { int p = 4; int q = 12; int res = gcd(p,q); System.out.println(res);//最大公约数 System.out.println(p*q/res);//最小公倍数原创 2020-05-26 22:07:35 · 179 阅读 · 0 评论 -
Leetcode(54、59回形数/螺旋矩阵问题)
Leetcode54 螺旋矩阵一题目描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]思路:典型的DFS问题。通过设立方向数组和标记数组即可实现。期间遇到的坑和知识点如下。判断二维数组为空的方式,分别用于判断数组不存在、{}、{{}}三种情况。 if((matrix==null||matr原创 2020-05-26 22:06:36 · 422 阅读 · 0 评论