博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刷前端面经笔记(十一)
阅读量:6092 次
发布时间:2019-06-20

本文共 3937 字,大约阅读时间需要 13 分钟。

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);    });

欢迎关注

转载地址:http://pimwa.baihongyu.com/

你可能感兴趣的文章
记录使用Vue相关API开发项目时遇到的问题难点整理(不定时更新)
查看>>
《Java8实战》-第五章读书笔记(使用流Stream-02)
查看>>
vue轮播图插件之vue-awesome-swiper
查看>>
Cabloy.js:基于EggBorn.js开发的一款顶级Javascript全栈业务开发框架
查看>>
HTTP相关知识汇总
查看>>
使用wagon-maven-plugin部署Java项目到远程服务器
查看>>
新书推荐 |《PostgreSQL实战》出版(提供样章下载)
查看>>
JavaScript/数据类型/function/closure闭包
查看>>
30个免费资源:涵盖机器学习、深度学习、NLP及自动驾驶
查看>>
读zent源码库之Dialog组件实现
查看>>
express中间层搭建前端项目3
查看>>
【刷算法】我知道的所有类似斐波那契数列的问题
查看>>
centos下安装JAVA开发工具(3)------Mysql
查看>>
JS 实现文字滚动显示
查看>>
php实现依赖注入(DI)和控制反转(IOC)
查看>>
如何搭建高质量、高效率的前端工程体系--页面结构继承
查看>>
白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
查看>>
Python时间运算的详细机制初探讨
查看>>
shell删除每行开始的数字
查看>>
前端--CSS
查看>>