在前端开发领域,计算问题一直是面试中的重要环节。这些问题不仅考察应聘者的基础知识,还考验他们的逻辑思维和问题解决能力。本文将揭秘一些常见的前端面试计算难题,并提供多种解题思路,帮助你轻松应对面试。
1. 数组去重
问题描述:给定一个数组,实现一个函数去除其中的重复元素。
解题思路:
- 方法一:使用Set:利用JavaScript中的Set数据结构,它可以自动去除重复的元素。
function uniqueArray(arr) {
return [...new Set(arr)];
}
console.log(uniqueArray([1, 2, 2, 3])); // 输出:[1, 2, 3]
- 方法二:排序后遍历:将数组排序,然后遍历数组,比较相邻元素是否相同。
function uniqueArray(arr) {
arr.sort((a, b) => a - b);
let result = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
result.push(arr[i]);
}
}
return result;
}
console.log(uniqueArray([1, 2, 2, 3])); // 输出:[1, 2, 3]
2. 两个数组的交集
问题描述:给定两个数组,返回它们的交集。
解题思路:
- 方法一:使用双指针:两个指针分别遍历两个数组,找到相同元素后添加到结果数组中。
function intersection(arr1, arr2) {
let i = 0, j = 0;
let result = [];
arr1.sort((a, b) => a - b);
arr2.sort((a, b) => a - b);
while (i < arr1.length && j < arr2.length) {
if (arr1[i] < arr2[j]) {
i++;
} else if (arr1[i] > arr2[j]) {
j++;
} else {
result.push(arr1[i]);
i++;
j++;
}
}
return result;
}
console.log(intersection([1, 2, 2, 4], [2, 2, 4, 6])); // 输出:[2, 4]
- 方法二:使用Map:创建一个Map来存储第一个数组的元素,然后遍历第二个数组,检查是否存在相同元素。
function intersection(arr1, arr2) {
let map = new Map();
arr1.forEach(item => map.set(item, true));
let result = [];
arr2.forEach(item => {
if (map.has(item)) {
result.push(item);
}
});
return result;
}
console.log(intersection([1, 2, 2, 4], [2, 2, 4, 6])); // 输出:[2, 4]
3. 素数判定
问题描述:判断一个数是否为素数。
解题思路:
- 方法一:试除法:从2开始试除,直到sqrt(n),如果找不到除数,则为素数。
function isPrime(n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 === 0 || n % 3 === 0) return false;
for (let i = 5; i * i <= n; i += 6) {
if (n % i === 0 || n % (i + 2) === 0) return false;
}
return true;
}
console.log(isPrime(29)); // 输出:true
- 方法二:筛法:使用埃拉托斯特尼筛法,生成一个素数表。
function isPrime(n) {
let prime = new Array(n + 1).fill(true);
prime[0] = prime[1] = false;
for (let i = 2; i * i <= n; i++) {
if (prime[i]) {
for (let j = i * i; j <= n; j += i) {
prime[j] = false;
}
}
}
return prime[n];
}
console.log(isPrime(29)); // 输出:true
总结
本文介绍了前端面试中常见的计算难题及其解题方法。通过掌握多种解题思路,可以帮助你在面试中游刃有余。希望这些内容能对你的前端学习之路有所帮助。
