返回

在JS里遇到的有趣面试题

前端

面试题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基础,提升算法和数据结构的应用能力,并在面试中取得优异的成绩。