duplicate-integer
问题描述
给定一个包含 n + 1 个整数的数组,其中每个整数都在 1 到 n 之间(包括 1 和 n) 存在重复整数则输出 true 否则 false
测试用例
console.log(hasDuplicateArray([1, 2, 3, 4, 4, 5])); // 输出: true
console.log(hasDuplicateArray([1, 2, 3, 4, 5])); // 输出: false
console.log(hasDuplicateSet([3, 1, 2, 5, 4, 2])); // 输出: true
console.log(hasDuplicateSet([1, 2, 3, 4, 5])); // 输出: false
解决方案
// 使用数组方法
function hasDuplicateArray(nums: number[]): boolean {
const n = nums.length - 1;
const seen = new Array(n + 1).fill(false);
for (const num of nums) {
if (seen[num]) {
return true;
}
seen[num] = true;
}
return false;
}
// 使用哈希表(Set)方法
function hasDuplicateSet(nums: number[]): boolean {
const seen = new Set<number>();
for (const num of nums) {
if (seen.has(num)) {
return true;
}
seen.add(num);
}
return false;
}
// 测试
console.log(hasDuplicateArray([1, 2, 3, 4, 4, 5])); // 输出: true
console.log(hasDuplicateArray([1, 2, 3, 4, 5])); // 输出: false
console.log(hasDuplicateSet([3, 1, 2, 5, 4, 2])); // 输出: true
console.log(hasDuplicateSet([1, 2, 3, 4, 5])); // 输出: false</code>