不确定有没有记错,记录一下vivo笔试题题目。个人第一次笔试,感觉题目不难,但是之前没怎么刷过题,熟练度不够,做的太惨,继续努力!

1.第一题是花园种树题。给花园地的长度和一个0与1的数字序列。1表示种了花,0表示空地。花和花之间需要有一个空格才能栽种。输出能够种的花的数量。
例如
5
1 0 0 0 0
返回是2

2.第二题是测试手机防摔功能。给两个数字,K,V。K表示有多少部手机,V表示楼层数目。返回测试出结果至少要的次数。
比如 K是1 V是2
如果在第一层 往下摔手机,如果摔坏了。抗摔能力就是0层
如果没摔坏,第二层摔手机,如果坏了,抗摔能力就是1层
如果没坏,抗摔能力就是2层。
所以要测试出结果,需要摔两次手机,程序返回 2
如果一开始在2层摔手机,并坏了,则无法得到结果。

3.第三题是多链表合并,题目的场景设置是流水线合并。输入是行数和多行的数字。要将他们合并,返回一个链表。
例如
3
3 4 5 6
5 6 7 10
2 4
合并结果是
2 3 4 4 5 5 6 6 7 10

以下不保证代码全对(其他题目后续再写)
第一题

function soluction(n, arr) {
    if (n === 0) return 0
    if (n === 1) {
        if (arr[0] === "0") return 1
        else return 0
    }

    arr.push("0")
    n = n + 1;
    let max = 0;
    for (let i = 0; i < n - 1; i++) {
        if (arr[i] === "0") {
            if (i === 0 && arr[i + 1] === "0") {
                i = i + 1;
                max += 1;
            }
            else if (arr[i - 1] === "0" && arr[i + 1] === "0") {
                i = i + 1;
                max += 1;
            }
        }
    }
    return max;
}

第三题
看到一个大佬说他是把所有数字放进数组里面,然后排序完再存入链表。
一下子感觉自己是个傻子。以下就是这种方法。其他的还有分治法,每次合并两个链表。

function List(value) {
    this.value = value;
    this.next = null;
}


function solution(n, lines) {
    let result = [];
    for (let i in lines) {
        result.push(...lines[i].split(" "));
    }
    result = result.map(Number);
    result.sort((a, b) => a - b);
    console.log(result)
    let first = new List(result[0]);
    let pre = first;
    for (let i = 1; i < result.length; i++) {
        let now = new List(result[i]);
        pre.next = now;
        pre = now;
    }

    return first
}