实现一个防抖函数
ts
const debounce = <T extends (...args: any[]) => any>(fn: T, time: number) => {
let timer: ReturnType<typeof setTimeout> | null = null;
return function (...args: Parameters<T>): void {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, args);
timer = null;
}, time);
};
};
const debounce = <T extends (...args: any[]) => any>(fn: T, time: number) => {
let timer: ReturnType<typeof setTimeout> | null = null;
return function (...args: Parameters<T>): void {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, args);
timer = null;
}, time);
};
};
实现一个GetArrayType,可以判断数组每一项的类型
ts
type GetArrayType<T> = T extends Array<infer U> ? U : never;
type Target = GetArrayType<Test>;
type GetArrayType<T> = T extends Array<infer U> ? U : never;
type Target = GetArrayType<Test>;
一个数组,找出三个数相乘的最大积
ts
const getMax = (nums: number[]): number => {
if (nums.length < 3) {
throw new Error("数组长度必须至少为3");
}
nums.sort((a, b) => b - a);
// 考虑最大三个正数或两个最小负数与一个最大正数的情况
return Math.max(
nums[0] * nums[1] * nums[2],
nums[0] * nums[nums.length - 1] * nums[nums.length - 2]
);
};
var maximumProduct = function(nums) {
// 最小的和第二小的
let min1 = Number.MAX_SAFE_INTEGER, min2 = Number.MAX_SAFE_INTEGER;
// 最大的、第二大的和第三大的
let max1 = -Number.MAX_SAFE_INTEGER, max2 = -Number.MAX_SAFE_INTEGER, max3 = -Number.MAX_SAFE_INTEGER;
for (const x of nums) {
if (x < min1) {
min2 = min1;
min1 = x;
} else if (x < min2) {
min2 = x;
}
if (x > max1) {
max3 = max2;
max2 = max1;
max1 = x;
} else if (x > max2) {
max3 = max2;
max2 = x;
} else if (x > max3) {
max3 = x;
}
}
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
};
const getMax = (nums: number[]): number => {
if (nums.length < 3) {
throw new Error("数组长度必须至少为3");
}
nums.sort((a, b) => b - a);
// 考虑最大三个正数或两个最小负数与一个最大正数的情况
return Math.max(
nums[0] * nums[1] * nums[2],
nums[0] * nums[nums.length - 1] * nums[nums.length - 2]
);
};
var maximumProduct = function(nums) {
// 最小的和第二小的
let min1 = Number.MAX_SAFE_INTEGER, min2 = Number.MAX_SAFE_INTEGER;
// 最大的、第二大的和第三大的
let max1 = -Number.MAX_SAFE_INTEGER, max2 = -Number.MAX_SAFE_INTEGER, max3 = -Number.MAX_SAFE_INTEGER;
for (const x of nums) {
if (x < min1) {
min2 = min1;
min1 = x;
} else if (x < min2) {
min2 = x;
}
if (x > max1) {
max3 = max2;
max2 = max1;
max1 = x;
} else if (x > max2) {
max3 = max2;
max2 = x;
} else if (x > max3) {
max3 = x;
}
}
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
};