当前位置: 首页 > 面试经验 >

绿盟软开笔试A卷8.28

优质
小牛编辑
127浏览
2023-03-28

绿盟软开笔试A卷8.28

题型:单选20 简答4 编程2

编程1 击鼓传花 (100%)

思路:循环队列模拟
注意:返回的是序号,数组中写下的是Nx(某整数)

function fn(arr) {
    // N 人数  start 从这个人开始   N1 第一次传几个人 dequeue 所有人在白板上写下的数
    let N = arr[0], start = arr[1], N1 = arr[2], dequeue = arr.slice(3).map((item, index) => [item, index+1])

    if (N < start) return -1;

    for (let i = 0; i < start-1; i++) {
        dequeue.push(dequeue.shift());
    }

    // 人数等于1则停止游戏
    while (dequeue.length > 1) {
        for (let i = 0; i < N1-1; i++) {
            dequeue.push(dequeue.shift());
        }

        N1 = dequeue.shift()[0];
    }

    return dequeue[0][1];

}

编程2 字符串旋转 (91%)

思路:字符串分割,翻转,拼接

// str2为子字符串,str1一定包含子字符串,子字符串不旋转,如果含有多个,则匹配第一个
function fn(str1, str2) {
    if (str1.length > 200) return; 
    let index = str1.indexOf(str2);
    let left = str1.slice(0, index);
    let right = str1.slice(index + str2.length);

    // 以下部分可能纯纯想多了,对通过率毫无贡献...
    let start = false, end = false;
    if (right.indexOf(str2) === 0) {
      start = true;   
    }

    if (right.lastIndexOf(str2) === right.length - str2.length) {
      end = true;
    }

    let res1 = swap(left);
    let res2 = right.indexOf(str2) === -1 ? swap(right) :right.split(str2).map(item => swap(item)).reverse().join(str2);

    res2 = start ? str2 + res2 : res2;
    res2 = end ? res2 + str2 : res2;

    return res2 + str2 + res1;
}

function swap(s) {
    return [...s].reverse().join('');
}

感觉方方面面都考虑到了,但一直通过91%累了...

#绿盟#
 类似资料: