leetcode刷题算法记录
分享关于刷leetcode学习到的一些算法
JianSinShen
努力做一个优秀的coder
展开
-
刷题记录之单调栈
这次记录的是这道题:添加链接描述 移掉K位数字,使得剩下的数字最小; 看到这道题我本来想的是算法课上那道测试题和周赛上那道题的思想,既然要求最小,那么我就从后往前删,先从倒数第k位往0找最大的,来删除,再从倒数第k-1位往0找最大的,再删除,不断递推,直到已经删除了k位,按理说这个思想应该是可以行得通的,但是没有考虑到如果删除后如果有前缀0会使数字少一位,更加的小,越想越麻烦!而且复杂度也特别特别的大,应该会达到O(n^2)时间复杂度! 接下来再来看官方题解的思路,虽然很好理解,但是不好想到,需要记录一下,原创 2020-12-23 14:51:03 · 63 阅读 · 0 评论 -
双指针(滑动窗口)模板
这个题得注意一下,使用滑动窗口时千万不要使用left<=right作为循环判断条件,当存在两个相等的值时,会导致因为哈希表中存在,左指针持续右移,使得left>right,从而跳出判断条件,不能够将整个数组遍历完,因此只是用一个right+1 < nums.length即可; 详细链接见:https://leetcode-cn.com/submissions/detail/132736871/ https://leetcode-cn.com/problems/maximum-erasure原创 2020-12-21 23:40:26 · 186 阅读 · 0 评论 -
刷题记录之两个数组合并得到最大值
发现了一个特别有意思的事情,以前认为是很简单的,昨天下午到今天发现,事情原来不是那么的简单,原题链接见: 根据部分题解,我以为这道题主要是考察单调栈,分别从两个数组中找出各自最大的单调队列,然后将两个单调递减合并就可以得到结果值。 首先,我的思路是:先将两个数组进行合并成为一个大的数组值,然后从中删除num1.length+num2.length-k位数字就可以得到结果,当然这个思路是错误的,因为它没有考虑到,如果一个数组为: arr1 = {5,6,3,9,2}; arr2 = {8,3,5,4}; k原创 2020-12-24 15:12:58 · 933 阅读 · 1 评论 -
刷题记录之递减,递增序列
刷题遇到一个很有意思的解法,递减序列/递增序列; 问题详情见:https://leetcode-cn.com/problems/sliding-window-maximum/ 抄的官方解答:https://leetcode-cn.com/problems/sliding-window-maximum/solution/hua-dong-chuang-kou-zui-da-zhi-by-leetcode-3/ 在本题中,自己的思路原来是:构造一个容量为k的大顶堆,从第k个往nums.length遍历,每次dp原创 2020-12-22 15:46:47 · 725 阅读 · 1 评论 -
并查集
并查集(不相交集合):用于判断一对元素是否相连,关系是动态添加,叫做动态连通性问题: 主要支持"合并"与"查询是否在同一个集合"操作; 底层结构是数组或者哈希表,用于表示结点指向的父节点,初始化时指向自己; 合并 就是把一个集合的根节点指向另一个集合的根节点,只要根节点一样,就表示在同一个集合里。 这种不想交集合的方法称为代表元法,以每一个结点的根节点作为一个集合的代表元。 并查集的应用: 最小生成树:Kruskal算法; ...原创 2021-03-03 16:53:46 · 149 阅读 · 0 评论