bilibili前端笔试编程部分代码

第一题:台阶走法,可以走1阶或2阶,n阶有多少种走法(斐波那契数列,这里用了非递归的写法)
var len = readline()
var arr = [0, 1, 2, 3],
    i = 4;
while (i <= n) {
    arr[i] = arr[i - 1] + arr[i - 2];
    i++;
}
console.log(arr[n]);
扩展:还有个可以走1阶,2阶,,,n阶,走n阶有多少种走法(共有2^(n-1)中走法)

第二题:找出有序数组(已排序)中和为sum的两个数,复杂度为o(n)
思路:从两端遍历,i=0,j=len-1,如果和小于sum,i++;如果等于记录两个值;如果大于sum,j--;遍历完有两个值的话,输出,没有输出‘notfound’(不是‘not found’哟,没有空格)
var len = readline();
var arr = readline().split(' ');
var sum = readline();
var i = 0,
    j = len - 1,
    a = 0,
    b = 0;
while (i < j) {
    var tmp = parseInt(arr[i]) + parseInt(arr[j]);
    if (tmp == sum) {
        a = arr[i];
        b = arr[j];
        break;
    }
    if (tmp > sum) {
        j--;
    }
    if (tmp < sum) {
        i++;
    }
}
if (a && b) {
    console.log(a + ' ' + b);
} else {
    console.log('notfound');
}
第三题:括号匹配,判断'()[]{}'组成的字符串是否匹配
思路:使用栈判断栈顶元素和当前元素是否匹配,匹配则继续,不匹配,直接break;
var str = readline();
var left = ['(', '[', '{'];
var right = [')', ']', '}'];
var arr = [],
    el, tmp, flag = true;
for (var i = 0; i < str.length; i++) {
    el = str[i];
    if (left.indexOf(el) > -1) {
        arr.push(el);
    } else {
        if (left.indexOf(arr.pop()) != right.indexOf(el)) {
            flag = false;
            break;
        }
    }
}
console.log(flag);



#前端##题解##笔试题目#
全部评论
题不难,难的是那个readline是个什么我没懂,特别是多行的时候
点赞 回复
分享
发布于 2019-08-20 20:55
前端只有3道算法题?
点赞 回复
分享
发布于 2019-08-20 21:10
联想
校招火热招聘中
官网直投

相关推荐

点赞 17 评论
分享
牛客网
牛客企业服务