在JS里遇到的有趣面试题
2023-12-21 02:45:59
面试题1:斐波那契数列
斐波那契数列想必大家都不会陌生。斐波那契数列的定义如下:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (n ≥ 2)
给定一个正整数n,求斐波那契数列的第n项。
function fibonacci(n) {
if (n < 0) {
throw new Error("n must be a non-negative integer.");
}
if (n < 2) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
上面的代码是一个简单的斐波那契数列求解算法。它使用递归的方式计算斐波那契数列的第n项。需要注意的是,这个算法的时间复杂度为O(2^n),也就是说,随着n的增大,算法的运行时间会呈指数级增长。
面试题2:二分查找
二分查找是一种在有序数组中查找元素的算法。其基本思想是,先将数组的中间元素与要查找的元素进行比较,如果中间元素等于要查找的元素,则返回中间元素的索引;如果中间元素小于要查找的元素,则在数组的后半部分继续查找;如果中间元素大于要查找的元素,则在数组的前半部分继续查找。如此反复,直到找到要查找的元素或数组为空。
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
上面的代码是一个简单的二分查找算法。它通过比较数组的中间元素与要查找的元素来缩小查找范围,从而提高查找效率。二分查找的时间复杂度为O(log n),也就是说,随着数组长度的增加,算法的运行时间只会增加对数倍。
面试题3:快速排序
快速排序是一种高效的排序算法。其基本思想是,首先选择一个基准元素,然后将数组中小于基准元素的元素放在基准元素的左边,将大于基准元素的元素放在基准元素的右边。如此反复,直到数组中的所有元素都被排序好。
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
const pivot = arr[0];
const left = [];
const right = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right));
}
上面的代码是一个简单的快速排序算法。它通过选择一个基准元素来将数组分成两部分,然后递归地对这两部分进行排序。快速排序的时间复杂度为O(n log n),也就是说,随着数组长度的增加,算法的运行时间只会增加对数倍。
结语
以上就是本文列举的几个在JavaScript面试中遇到的有趣面试题。这些题目涵盖了JavaScript的基础知识、算法和数据结构,以及一些实际开发中常见的问题。通过这些题目的学习,希望能够帮助读者巩固JavaScript基础,提升算法和数据结构的应用能力,并在面试中取得优异的成绩。