贰.1.5 实战:字节跳动前端面试2道算法题
有关数组和二叉树的题高频出现
贰.1.5.1 多维数组扁平化
题目
分析
解法一
(() => {
//题目中给的测试数据
let sourceArr = [[0], [2, 3, 4], 1, [1, [2, 3]]];
//结果数组,用来保存最终输出的数据
let resultArr = [];
(function doFunc(arr) {
//若无子数组,直接把arr的数据导入结果数组resultArr
if (!hasChildArray(arr)) {
//用concat方法,将resultArr与arr合并后再返回给resultArr
resultArr = resultArr.concat(arr);
}
//若有子数组
else {
for (let i = 0, l = arr.length; i < l; i++) {
//如果子元素类型是数字
if (typeof arr[i] == "number") {
resultArr.push(arr[i]); //放入结果数组中保存起来
}
//否则,如果子元素类型是数组
else if (Array.isArray(arr[i])) {
doFunc(arr[i]); //递归调用
}
}
}
})(sourceArr);
console.log(resultArr); //>> [0, 2, 3, 4, 1, 1, 2, 3]
/**
* 定义一个工具性子函数,判断参数中传来的数组是否有子数组
* @param {Array} 数组
* @return {Boolean} true:有;false:没有
*/
function hasChildArray(arr) {
/*
arr.some() 方法测试数组arr中是不是有元素通过了被提供的函数callback
的测试。它返回的是一个Boolean类型的值。只要数组中有元素通过callback的
测试就会返回true;所有元素都没有通过callback的测试,返回值才会为false。
*/
return arr.some(function callback(item) {
//判断arr中的子元素item是否数组
if (Array.isArray(item)) {
return true; //返回true表明通过了测试,让外层some也返回true
}
});
}
})();解法二
贰.1.5.2 二叉树&完整路径和
题目
分析
解法一
解法二
贰.1.5.3 本篇结语
最后更新于
这有帮助吗?