30 天刷题计划(七)
题目来源: LeetCode 75 30 天 JavaScript 挑战
2629. 复合函数
思路
使用 reduceRight
执行 fn,执行的结果作为下一个 fn 的入参
代码
function compose(functions: F[]): F {
return (x) => functions.reduceRight((sum, fn) => fn(sum), x)
};
2703. 返回传递的参数的长度
代码
function argumentsLength(...args: JSONValue[]): number {
return args.length
};
2666. 只允许一次函数调用44
思路
使用闭包存储一个变量记录是否调用
代码
function once(fn: Function): OnceFn {
let used = false
return function (...args) {
try {
return fn(...args)
} finally {
fn = () => {}
}
};
}
1732. 找到最高海拔
思路
按题意计算最大值
代码
function largestAltitude(gain: number[]): number {
let start = 0
let res = [start]
for(let i = 0; i < gain.length; i++) {
res.push(start += gain[i])
}
return Math.max(...res)
};
724. 寻找数组的中心下标
思路
一次遍历,左右值相等则返回当前数组索引,否则返回 -1
代码
const sumArr = (arr) => {
return arr.reduce((prev, cur) => prev + cur, 0)
}
function pivotIndex(nums: number[]): number {
let sum = sumArr(nums)
let right = sum
let left = 0
for (let i = 0; i < nums.length; i++) {
right -= nums[i]
if (left === right) {
return i
}
left += nums[i]
}
return -1
};
2215. 找出两数组的不同
思路
一种直接用 js 的数组方法;第二种借助 map 对象;
代码
/// 数组解法
function findDifference(nums1: number[], nums2: number[]): number[][] {
const d1 = nums1.filter(n => !nums2.includes(n))
const d2 = nums2.filter(n => !nums1.includes(n))
return [[...new Set(d1)] , [...new Set(d2)]]
};
/// Map 解法
function findDifference(nums1: number[], nums2: number[]): number[][] {
return [getDiff(nums2, nums1), getDiff(nums1, nums2)]
};
const getDiff = (arr1, arr2) => {
const res = []
const map = new Map()
arr1.forEach(n => map.set(n, 1))
arr2.forEach(n => {
if (!map.has(n)) {
res.push(n)
}
})
return [...new Set(res)]
}
转载自:https://juejin.cn/post/7285604041933520911