数据结构
良良2号
小时候真傻,居然盼着长大。
展开
-
合理的括号
判断括号是否合理思路用栈来模拟:遍历字符串中的每个字符,遇到左括号入栈,遇到右括号出栈。不证明合理,而是证明不合理。出栈时,需要判断栈是否为空,为空则一定不是合理的括号对。出栈时,若比对不匹配,也不是合理的括号对。遍历完成后,若栈中还有元素,则一定不是合理的括号对。代码/** * * @param s string字符串 * @return bool布尔型 */// 遇到左括号入栈,遇到右括号出栈匹配function isValid( s ) {原创 2021-08-26 15:55:10 · 75 阅读 · 0 评论 -
两个栈模拟一个队列
两个栈模拟一个队列思路对于js来说,意味着只能使用push()和pop()方法,不能使用shift()方法。入队操作,直接压入入队栈(push)即可。出队操作需要优先检查出队栈是否有数据:若有,直接出栈。(pop)若无,需要从入队栈倒入(push)后再出栈(pop)。代码var CQueue = function() { this.inStack = []; this.outStack = [];};/** * @param {number} value原创 2021-08-10 16:17:34 · 61 阅读 · 0 评论 -
数据结构设计之LRU
LRU思路用map来维护key和value,将最近使用的键值对放在map的末尾。为什么不用对象存储?因为对象中属性是没有顺序的(见文末的解释)。无论是put还是get,都需要更新当前的key为最近使用。最简单的办法就是,先把key删除,再增加该key。由于Map查找key、删除key、增加key的时间复杂度都是O(1),所以算法的整个时间复杂度为O(1)。代码/** * @param {number} capacity */var LRUCache = function(原创 2021-07-24 21:20:41 · 155 阅读 · 0 评论