不确定有没有记错,记录一下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
}
京公网安备 11010502036488号