前言🌧️
算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。
因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。
当然,学习也是有侧重点的,作为前端我们不需要像后端开发一样对算法全盘掌握,有些比较偏、不实用的类型和解法,只要稍做了解即可。
题目🦀
难度简单
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)
示例:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -2.
提示:
- 各函数的调用总次数不超过 20000 次
解题思路🌵
- 利用一个辅助对象obj来管理我们的最小值
- 当第一次入栈时,min为自己本身,否则和当前栈顶的最小值进行比较赋值,始终栈顶obj.min保存着最小值
解法🔥
/** * initialize your data structure here. */ var MinStack = function() { this.stack=[] }; /** * @param {number} x * @return {void} */ MinStack.prototype.push = function(x) { const obj={} obj.val=x if(!this.stack.length){ obj.min=x }else{ obj.min=Math.min(this.stack[this.stack.length-1].min,x) } this.stack.push(obj) }; /** * @return {void} */ MinStack.prototype.pop = function() { return this.stack.pop().val }; /** * @return {number} */ MinStack.prototype.top = function() { return this.stack[this.stack.length-1].val }; /** * @return {number} */ MinStack.prototype.min = function() { return this.stack[this.stack.length-1].min }; /** * Your MinStack object will be instantiated and called as such: * var obj = new MinStack() * obj.push(x) * obj.pop() * var param_3 = obj.top() * var param_4 = obj.min() */
时间复杂度:O(1)
空间复杂度:O(n)
结束语🌞
那么鱼鱼的LeetCode算法篇的「LeetCode」剑指Offer-30包含min函数的栈⚡️
就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾
,欢迎加我好友
,一起沙雕
,一起进步
。