![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
业火之理
这个作者很懒,什么都没留下…
展开
-
【leetcode】215、347最小堆做法
原理 堆是个完全二叉树,js中一般可以使用数组来表示。 最小堆顶部是最小元素,每次插入或者删除的时间复杂度是Olog(n),查找第k个最大元素O1(其实就是设置堆容量为k,最小那个就是第k个最大元素)。 当堆容量超过k,删除堆顶,堆顶的替换需要下移。 任意堆内元素找其父亲索引是其索引-1除以2的商。 获取左侧子节点索引是 索引*2+1 ,右侧是 *2+2 215代码 215正常思路是排序,然后取索引k-1就行了,这里不说了。 堆做法: class Minheap{ constructor()原创 2020-07-18 21:16:17 · 325 阅读 · 0 评论 -
【leetcode】113总结
原理 无向图遍历主要原理是利用个map记录已访问过的节点,在遍历时进行判断,如果访问过就不递归。 leetcode 133 使用深度优先遍历: var cloneGraph = function(node) { if(!node)return[] let map = new Map() let dfs= function (node){ let clone = new Node(node.val) console.log(node.val);原创 2020-07-18 16:40:37 · 152 阅读 · 1 评论 -
【数据结构与算法】递归转栈
前言 以前学数据结构学的很盲目,特别是后面学递归dp感觉脑子完全不够用,好像自己完全不是这块料一样。后来群里吹牛以及找各种资料发现能用递归的都可以用栈实现,递归本质是让系统帮你维护个栈,而你不递归,那么就自己手动维护栈,这样就能达到同样效果。 简单例题 leecode 144. 二叉树的前序遍历 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 递归思路 var preorderTraversal = function(ro原创 2020-07-03 05:39:04 · 825 阅读 · 1 评论 -
【leetcode】718 最长重复子数组(滑动窗口解法)
前言 这是今日的每日一题,但是leetcode题解里对滑动窗口的解法动图之类有特别强烈的误导性,导致一般很难写出滑动窗口的解法。我自己研究之后,将他们错误的流程图改编成正确的流程便于以后有类似需求可以想到。 原理 这个滑动窗口的写法跟一般滑动窗口写法不太一样,一般滑动窗口只要移动指针就完事了,这个滑动窗口其实不应该看成滑动窗口,而应该去找规律。 leetcode题解里面对这题虽然动图意思对的,但是顺序以及注意点都有强烈误导性,导致正常人看了动图压根写不出这种循环。所以我拿别人图将顺序和过程以及注意点改原创 2020-07-01 09:38:44 · 573 阅读 · 1 评论