腾讯前端笔试20220424
太难辽😭先发篇帖子做一下记录,也请各位大佬分享见解思路!
第一题:放大镜(左边一倍图,右边二倍图,实现放大镜的功能)
2. 第二题:循环链表的最小字典序:
给定一个链表数组,数组中是每个链表的head节点
如 : [ {1, 2, 3}, {5, 7, 9}, {2, 3, 5}, {9, 10, 1, 2} ]
则组成的循环链表为 {1, 2, 3, 5, 7, 9, 10}
保证能组成一个循环链表;
该链表可以从环的任何一个位置断开,求字典序最小的断开方式对应的链表!
3. 第三题:股票买入卖出问题:
给定现金 m, 给定n天的股票单价数组 (长度为n)
每天最多买入一手股票,或者最多卖出一只股票,求最后一天结束后,我的最大资产(包括现金 + 股票)。
4. 数组扁平化:
给定数组arr,和层数 n,将原数组扁平化到n层;
如:[1, 2, 3, [4] ], 1
输出 [ 1, 2, 3, 4 ]
[ 1, 2, [3, [4, [5] ] ] ], 2
输出 [1, 2, 3, 4, [5]]
这是我的代码,没有通过:
let a = [1,[2,[3,[4]],5]]; let n = 2; let dfs = (arr) => { let len = arr.length; let max = 0; for(let i = len - 1; i >= 0; i--){ let a = arr[i]; if(a instanceof Array){ let ceng = dfs(a); if(ceng > n - 1){ arr.splice(i, 1, ...a); ceng -= 1; } max = Math.max(max, ceng) } } return max + 1; } dfs(a); print(JSON.stringify(a));
给定 前 n - 1 行,为 该元素的标识和序号;
序号是递增的,但不一定连续;
第 n 行,“a, b, c” 将标识为a的元素,挪到标识为 b 和 c 的元素之间。如果b为最后一个元素,则c = "0";
如:
a, 1
b, 3
c, 10
d, 15
a, d, 0
输出:
b, 1
c, 3
d, 10
a, 15