🍈作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生
🍇个人主页:亦世凡华、
🍓系列专栏:算法训练营
🥝没有引发任何行动的思想都不是思想而是梦想。
目录
什么是栈?
栈(stack)又名堆栈,它是一种运算受限的线性表。限定权在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈【模板】
push x:将 加x x\ x 入栈,保证 x x\ x 为 int 型整数。
pop:输出栈顶,并让栈顶出栈
top:输出栈顶,栈顶不出栈
输入描述:
第一行为一个正整数 n n\ n ,代表操作次数。(1≤n≤100000)(1 \leq n \leq 100000)(1≤n≤100000)
接下来的 n n\ n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。
输出描述:
如果操作为push,则不输出任何东西。
如果为另外两种,若栈为空,则输出 “error“
否则按对应操作输出。
let stack = [];
let top = -1;
while ((line = readline())) {
var arr = line.split(" ");
// 将循环的次数跳过
if (!isNaN(parseInt(arr[0]))) {
continue;
}
if (arr.length === 2) {
stack[++top] = arr[1];
} else if (arr[0] === "pop") {
if (top === -1) {
console.log("error");
} else {
console.log(stack[top--]);
}
} else {
if (top === -1) {
console.log("error");
} else {
console.log(stack[top]);
}
}
}
栈的压入、弹出系列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
1. 0<=pushV.length == popV.length <=1000
2. -1000<=pushV[i]<=1000
3. pushV 的所有数字均不相同
示例:
输入:[1,2,3,4,5],[4,5,2,3,1]
返回:true
说明:可以通过
push(1)=>push(2)=>(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop()
这样的顺序得到[4,5,3,2,1]这个序列,返回true。
function IsPopOrder(pushV, popV)
{
// write code here
let stack = []
for (let node of pushV){
stack.push(node);
while (stack[stack.length - 1] === popV[0]){
stack.pop();
popV.shift();
if (popV.length === 0) return true;
}
}
while (stack.pop() === popV.shift()){
if (popV.length === 0) return true;
};
return false;
}
module.exports = {
IsPopOrder : IsPopOrder
};
有效括号序列
给出一个仅包含字符'(‘,’)’,'{‘,’}’,'[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,”()”和”()[]{}”都是合法的括号序列,但”(]”和”([)]”不合法。数据范围:字符串长度 0≤n≤100000\le n \le 100000≤n≤10000
要求:空间复杂度 O(n)O(n)O(n),时间复杂度 O(n)O(n)O(n)
示例:
输入:”()[]{}”
返回值:true
/**
*
* @param s string字符串
* @return bool布尔型
*/
function isValid( s ) {
// write code here
const truely = ["()","[]","{}"]
function check() {
const checkList = truely.filter( item => {
return s.indexOf( item ) > -1
})
return checkList.length
}
while( check() > 0 ) {
truely.forEach( item => {
s = s.replace( item, "" )
})
}
if( s.length > 0 ) {
return false
}else {
return true
}
}
module.exports = {
isValid : isValid
};
逆波兰表达式求值
给定一个逆波兰表达式,求表达式的值。
数据范围:表达式长度满足 1≤n≤104 1 \le n \le 10^4 \ 1≤n≤104 ,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣val∣≤200 |val| \le 200 \ ∣val∣≤200 。
示例:
输入:[“2″,”1″,”+”,”4″,”*”]
返回值:12
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
function evalRPN( tokens ) {
// write code here
var stack = [];
for (let i = 0;i<tokens.length;i++)
{
if(tokens[i]!=='+'&&
tokens[i]!=='-' &&
tokens[i]!=='*' &&
tokens[i]!=='/')
stack.push(parseInt(tokens[i]));
else {
let b = stack.pop()
let a = stack.pop()
switch(tokens[i]){
case '+' :
stack.push(a+b)
break
case '-':
stack.push(a-b)
break
case '*':
stack.push(a*b)
break
case '/':
stack.push(parseInt(a/b))
break
}
}
}
return stack.pop();
}
module.exports = {
evalRPN : evalRPN
};
点击消除
牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串”abbc”点击后可以生成”ac”。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?输入描述:
一个字符串,仅由小写字母组成。(字符串长度不大于300000)
输出描述:
一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。
示例:
输入:abbc
输出:ac
const str = readline();
const inarr = str.split("");
const arr = [];
for( let i = 0, l = inarr.length; i < l; i++ ) {
const item = inarr[i];
if( i > 0 && item === arr[arr.length - 1] ) {
arr.pop()
}else {
arr.push( item )
}
}
if( arr.length > 0 ) {
print(arr.join(""))
}else {
print(0)
}
表达式求值
请写一个整数计算器,支持加减乘三种运算和括号。
数据范围:0≤∣s∣≤1000\le |s| \le 1000≤∣s∣≤100,保证计算结果始终在整型范围内
要求:空间复杂度: O(n)O(n)O(n),时间复杂度 O(n)O(n)O(n)
示例:
输入:”1+2″
输出:3
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
function solve( s ) {
// write code here
return eval(s)
}
module.exports = {
solve : solve
};
活动地址:CSDN21天学习挑战赛
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140085.html