LeeCode-刷题日记-Day27
155. 最小栈
思路:创建一个最小值的栈,每次插入都把目前最小值存入栈中。出栈时,同步出栈,即可拿到当前栈的最小值。
var MinStack = function() {
this.x_stack=[];
this.min_stack=[Infinity]
};
/**
* @param {number} val
* @return {void}
*/
MinStack.prototype.push = function(val) {
this.x_stack.push(val);
this.min_stack.push(Math.min(this.min_stack[this.min_stack.length-1],val));
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
this.x_stack.pop();
this.min_stack.pop();
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.x_stack[this.x_stack.length-1];
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function() {
return this.min_stack[this.min_stack.length-1];
};
1249. 移除无效的括号
思路:创建一个栈来存储,一个栈来存标记位。遍历字符串,寻找括号。遇到左右括号不匹配的情况将其入栈。左右括号匹配的情况将其出栈。最终遍历s,将其中在栈中的元素删除。
/**
* @param {string} s
* @return {string}
*/
var minRemoveToMakeValid = function(s) {
let stack={},stackIndex=[];
for(let i=0;i<s.length;i++){
let item = s[i];
if(!/[\(|\)]/.test(item)){
continue;
}
//peek
let peekIndex = stackIndex[stackIndex.length-1];
let peek = stack[peekIndex];
if(peek && item ===")"&&peek==="("){
delete stack[peekIndex];
stackIndex.pop();
}else{
stackIndex.push(i);
stack[i]=item;
}
}
return s.split("").filter((k,index)=>!stack[index]).join("");
};
1823. 找出游戏的获胜者
思路:将每个元素依次入栈,利用k跳转遍历。每次移除一个数。循环n-1次,最终在栈中的元素即使胜利者。
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var findTheWinner = function(n, k) {
let res=[];
for(let i=1;i<=n;i++){
res.push(i);
}
let index=0;
for(let i=1;i<n;i++){
index=(index+k-1)%res.length;
res.splice(index,1)
}
return res.pop()
};
- 本文链接:https://archer-lan.github.io/2023/11/20/LeeCode-%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0-Day27/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。