1、两数之和:
let arr = [3, 7, 10, 2, 9, 1, 4]
// for 暴力循环 -- 执行时间 sum1: 0.347900390625 ms
function twoNumsSum(arr, target) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (target - arr[i] === arr[j] && i !== j) return [i, j]
}
}
return 'no found'
}
// 利用对象储存目标键值对 -- 执行时间 sum2: 0.213134765625 ms
function twoNumsSum(arr, target) {
let obj = {}
for (let i = 0; i < arr.length; i++) {
if (obj[target - arr[i]] !== undefined) {
return [obj[target - arr[i]], i]
}
obj[arr[i]] = i
}
}
console.log(twoNumsSum(arr, 9)) // 输出结果 [1, 3]
2、数组扁平化
let arr = [3, [7, 10], [2, [9, 1]], 4, [[[5, 11], 22], 15, 17], 14]
// 使用reduce + concat方式递归处理 -- 执行时间 flat1: 0.376953125 ms
function toFlat(arr) {
return arr.reduce((prev, next) => prev.concat(Array.isArray(next) ? toFlat(next) : next), [])
}
// 使用ES6规范 -- 执行时间 flat2: 0.14404296875 ms
function toFlat(arr) {
return arr.flat(Infinity)
}
// 利用数组的栈操作 -- 执行时间 flat3: 0.240966796875 ms
function toFlat(arr) {
let stack_a = [...arr]
let stack_b = []
while (stack_a.length) {
const _tmp = stack_a.pop()
Array.isArray(_tmp) ? stack_a.push(..._tmp) : stack_b.unshift(_tmp)
}
return stack_b
}
console.log(toFlat(arr)) // 输出结果 [3, 7, 10, 2, 9, 1, 4, 5, 11, 22, 15, 17, 14]