不确定有没有记错,记录一下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 }