1.栈的压入和弹出

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列5,4,3,2,13,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

function IsPopOrder(pushV,popV){if(pushV.length === 0) return false;var stack = []; // 模拟栈for(var i = 0, j = 0; i < pushV.length;){stack.push(pushV[i]);i += 1;// 压入栈的值需要被弹出while(j < popV.length && stack[stack.length-1] === popV[j]){stack.pop();j++;if(stack.length === 0) break;}}return stack.length === 0;
}

2.利用栈模拟队列

思路:

  • 对栈A添加数据。
  • 如果栈B为空,循环将栈A中内容弹出放入栈B,并弹出栈B最后一项
  • 如果栈B不为空,则直接弹出栈B的最后一项
var stackA = [];
var stackB = [];function push(node){stackA.push(node);
}
function pop(){if(!stackB.length){while(stackA.length){stackB.push(stackA.pop());}}return stackB.pop();
}

3.连续最长不重复字符串

在一个字符串中找出连续的不重复的最大长度的字符串,解决这类问题的思路:

  • 利用循环叠加字符串,直到出现重复为止
  • 每一次叠加,记录下来最大长度的字符串
// 连续最长不重复字符串
function getMaxLenStr(str) {var cur = [];var maxLenStr = '';for(var i = 0; i < str.length; i++) {if(!cur.includes(str[i])) {cur.push(str[i]);} else {cur = []; // 置为空cur.push(str[i]);}// 存储最大长度的字符串if(maxLenStr.length < cur.length) {maxLenStr = cur.join('');}        }return maxLenStr;
}getMaxLenStr('ababcabcde'); // abcde

4.求一个数组当中,连续子向量的最大和。

function FindGreatestSumOfSubArray(arr) {let sum = arr[0];let max = arr[0];for(let i = 1; i < arr.length; i++) {if(sum < 0) {sum = arr[i];}else{sum += arr[i];}// 记录最大值if(max < sum) {max = sum;}}return max;
} 

5.给定一个编码字符,按编码规则进行解码,输出字符串

编码规则:coount[letter] ,将letter的内容count次输出,count0或正整数,letter是区分大小写的纯字母。
实例:

  • const s= 3[a]2[bc]; decodeString(s); // 返回 ‘aaabcbc’
  • const s= 3[a2[c]]; decodeString(s); // 返回 ‘accaccacc’
  • const s= 2[ab]3[cd]ef; decodeString(s); // 返回 ‘ababcdcdcdef’

思路:

  • 使用栈这种数据结构,如果push的内容为‘]’,则循环pop字符,直到碰到’[‘,然后将pop出来的字符串按规则整理后,重新push进栈中,最后将栈内的内容拼接成字符串输出即可。
function decodeString(str) {let stack = []; // 存储字符串的栈for (let i = 0; i < str.length; i++) {let cur = str[i];if (cur !== ']') {stack.push(cur);} else { // 弹出let count = 0;let loopStr = [];let popStr = '';while ((popStr = stack.pop()) !== '[') {loopStr.unshift(popStr);}count = stack.pop();// 添加结果let item = '';for (let i = 0; i < count; i++) {item += loopStr.join('');}stack.push(...(item.split('')));}}return stack.join('');
}

6.['1', '2', '3'].map(parseInt) 的运行结果

答案为:[1, NaN, NaN]
解析:

  • arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])

这个callback一共可以接收三个参数,其中第一个参数代表当前被处理的元素,而第二个参数代表该元素的索引。

parseInt则是用来解析字符串的,使字符串成为指定基数的整数。
- parseInt(string, radix)

接收两个参数,第一个表示被处理的值(字符串),第二个表示为解析时的基数。

  • parseInt('1', 0) //radix0时,且string参数不以“0x”“0”开头时,按照10为基数处理。这个时候返回1
  • parseInt('2', 1) //基数为1(1进制)表示的数中,最大值小于2,所以无法解析,返回NaN

- parseInt('3', 2) //基数为22进制)表示的数中,最大值小于3,所以无法解析,返回NaN

map函数返回的是一个数组,所以最后结果为[1, NaN, NaN]

7.自定义事件

var content = document.querySelector('.content');// 自定义事件var evt = new Event('custom');var customEvt = new CustomEvent('customEvt', {// 通过这个属性传递参数detail: {name: 'tom',age: 12}});content.addEventListener('custom', (e) => {console.log('自定义事件被触发,无参数...');console.log(e);});content.addEventListener('customEvt', (e) => {console.log('自定义事件被触发,有参数...');console.log(e);console.log(e.detail);});// 点击时触发这个自定义事件content.addEventListener('click', (e) => {content.dispatchEvent(evt);content.dispatchEvent(customEvt);});

刷前端面经笔记(十一)相关推荐

  1. 刷前端面经笔记(二)

    1.实现三栏布局(左右两边固定宽度,中间自适应) 1)浮动布局 左右两边固定宽度,并分别设置float:left和float:right.(但这会带来高度塌陷的问题,所以要清除浮动.清除浮动的方式有: ...

  2. 刷前端面经笔记(七)

    1.描述一下渐进增强和优雅降级 优雅降级(graceful degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复. 渐进增强(progressive enhancement) ...

  3. 刷前端面经笔记(十二)

    1.以下递归函数存在栈溢出的风险,请问如何优化? function factorial(n){return n*factorial(n-1) } 解答: function factorial(n){r ...

  4. 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法. 查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索, 如果该元素正好 ...

  5. 刷前端面经笔记(三)

    1.var的变量提升的底层原理是什么? JS引擎的工作方式是 1)先解析代码,获取所有被声明的变量: 2)然后再执行. 也就是分为预处理和执行这两个阶段. 变量提升:所有用var声明变量的语句都会被提 ...

  6. 前端面经笔记 2021.8.28

    前端面经笔记 2021.8.28 下面哪些执行结果为true() A.'foo' == new function(){ return String('foo'); }; B.'foo' == new ...

  7. 前端面试题笔记 2021.8.26

    2021.8.26学习笔记 如果需要匹配包含文本的元素,用下面哪种方法来实现? A. text() B. contains() C. input() D. attr(name) 正确答案: B tex ...

  8. 前端攻城狮学习笔记七:常见前端面试题之HTML/CSS部分(二)

    前端页面有哪三层构成,分别是什么?作用是什么? 1.结构层:由 HTML 或 XHTML 之类的标记语言负责创建,仅负责语义的表达.解决了页面"内容是什么"的问题. 2.表示层:由 ...

  9. 【前端】前端面试题整理

    前端和计算机相关知识 你能描述一下渐进增强和优雅降级之间的不同吗 浏览器兼容问题 如何对网站的文件和资源进行优化? 怎么学习前端?怎么接触前端新知识? 关于前后端分离 关于浏览器内核(渲染引擎) 浏览 ...

最新文章

  1. 想学习 Python,这套教程再适合你不过了!
  2. python plot 坐标轴范围,Python,Matplotlib,子图:如何设置轴范围?
  3. 杭电1254java实现(双bfs 优先队列)
  4. ubuntu apache 完全删除
  5. 【数据分析】线性回归与逻辑回归
  6. 冯·卡门:用数学武装工程科学
  7. 测量在Python中经过的时间
  8. laravel如何利用数据库的形式发送通知
  9. 杰理之录音详细流程框图【篇】
  10. vue下载二进制流图片
  11. priority的用法
  12. 计算机网络按照交换方式分,按照数据交换方式分计算机网络分为()
  13. VMware® Workstation 16 Pro创建WIN7虚拟机教程
  14. 酒店标识的要求不同其设计也不同
  15. 蚂蚁金服宫孙:guava探究系列之优雅校验数据
  16. 单线复用有线Mesh组网案例
  17. 我是K哥,大厂高管,抓住过几次风口,交个朋友吧
  18. 实际场景中的多线程使用
  19. 图像处理 - 打开图片
  20. NLP中的对话机器人——问答机器人的应用场景

热门文章

  1. Mysql性能优化方案
  2. linux学习之yum命令的使用
  3. 为什么不应该使用“volatile”类型
  4. python保存路径_Python IDLE的默认保存路径?
  5. 【Python入门】你值得拥有的这八个实用工具安装包与实战项目
  6. 编程难学?3点解答你的疑惑
  7. linux给用户写任务计划,linux——计划任务
  8. 执行前端测试的必要性
  9. docker如何迁移数据目录
  10. w ndows10防火墙在哪,Win10防火墙在哪里,怎么关闭Win10防火墙?