堆
栈 stack
栈,后进先出;FILO(First In Last Out,后进先出)的原则存储数据。
在栈里,新元素都靠近栈顶,旧元素都接近栈底;
栈和队列的数据结构类似于数组,在添加和删除元素时更可控;
栈的相关概念
- 栈顶和栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
- 压栈 PUSH:栈的插入操作,叫做进栈,也称压栈、入栈。
- 弹栈 POP:栈的删除操作,也叫做出栈
https://gitee.com/du-weiwei/typora/raw/master/20210806175043.gif
https://www.cnblogs.com/lytdw123/p/15170424.html
https://www.zhihu.com/topic/20183311/top-answers
https://www.zhihu.com/topic/20183311/top-answers
https://leetcode-cn.com/problems/baseball-game/
for循环
function ballGame(array) {const result = [];const {length} = array;// 遍历数组,处理得分for(let i=0; i<length; i++) {const item = array[i];let prev = 0;// 删除,前一次得分无效if(item === 'C') {result.pop();}// 前一次得分的两倍else if(item === 'D') {prev = result.pop() * 1;result.push(prev, prev * 2)}// 前两次得分的总和else if(item === '+') {prev = result.pop() * 1;const prev2 = result.pop() * 1;result.push(prev2, prev, prev + prev2);}else {result.push(item*1);}}return result.reduce((memo, next) => (memo + next), 0);}

for of
性能比 for循环差
function ballGame(array) {
const result = [];
let prev = 0;
// 遍历数组,处理得分
for(let item of array) {
switch(item) {
case 'C': // 删除,前一次得分无效
result.pop();
break;
case 'D': // 前一次得分的两倍
prev = result.pop() * 1;
result.push(prev, prev * 2);
break;
case '+': // 前两次得分的总和
prev = result.pop() * 1;
const prev2 = result.pop() * 1;
result.push(prev2, prev, prev + prev2);
break;
default:
result.push(item*1);
}
}
return result.reduce((memo, next) => (memo + next), 0);
}

