返回

路飞_前端算法第二弹

前端

前言

继上次的五道排序题之后,今天又做了五道题,来记录一下我做题和思考的过程,下次再记录经过整理优化之后的方法。这次记录主要是记录我看到这几道题的第一反应,由于做题做的少,所以第一反应往往不是那么准确,熟能生巧。

题目一:斐波那契数列

给定一个整数 n ,求斐波那契数列的第 n 项。

斐波那契数列是一个特殊的数列,其中每个数字都是前两个数字的和。第一个和第二个数字都为 1,接下来的数字就由前面两个数字相加而得出。

我的第一反应是使用递归函数来解决这个问题。递归函数是一种函数,它会调用它自身来完成任务。在这种情况下,递归函数将调用它自身来计算斐波那契数列的第 n 项,然后返回该值。

function fibonacci(n) {
  if (n === 0 || n === 1) {
    return 1;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}

题目二:字符串反转

给定一个字符串,将其反转。

我的第一反应是使用循环来解决这个问题。循环是一种控制结构,它可以重复执行一段代码,直到满足某个条件。在这种情况下,循环将重复执行一段代码,直到字符串被完全反转。

function reverseString(str) {
  var reversedString = "";
  for (var i = str.length - 1; i >= 0; i--) {
    reversedString += str[i];
  }
  return reversedString;
}

题目三:二分查找

给定一个有序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不在数组中,则返回 -1。

我的第一反应是使用二分查找算法来解决这个问题。二分查找算法是一种高效的搜索算法,它将数组分成两半,然后递归地搜索每一半,直到找到目标值。

function binarySearch(arr, target) {
  var low = 0;
  var high = arr.length - 1;

  while (low <= high) {
    var mid = Math.floor((low + high) / 2);
    var guess = arr[mid];

    if (guess === target) {
      return mid;
    } else if (guess < target) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }

  return -1;
}

题目四:冒泡排序

给定一个数组,对其元素进行冒泡排序。

我的第一反应是使用冒泡排序算法来解决这个问题。冒泡排序算法是一种简单的排序算法,它将数组中的元素逐个比较,并将较大的元素交换到数组的末尾。

function bubbleSort(arr) {
  var swapped;
  do {
    swapped = false;
    for (var i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        var temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
        swapped = true;
      }
    }
  } while (swapped);
}

题目五:快速排序

给定一个数组,对其元素进行快速排序。

我的第一反应是使用快速排序算法来解决这个问题。快速排序算法是一种高效的排序算法,它将数组分成两部分,然后递归地对每一部分进行排序。

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  var pivot = arr[arr.length - 1];
  var left = [];
  var right = [];

  for (var i = 0; i < arr.length - 1; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

  return quickSort(left).concat(pivot, quickSort(right));
}

结语

以上就是我做题和思考的过程,下次我会记录经过整理优化之后的方法。希望对大家有所帮助。