前端面试:【算法】排序、查找、递归、动态规划

算法是计算机科学的核心,是解决问题的方法和步骤。在编程和软件开发中,了解和掌握各种常见算法至关重要。本文将详细介绍四种重要的算法:排序、查找、递归和动态规划,并提供示例来帮助你理解它们的应用。

1. 排序算法:

排序是将一组元素按照一定的顺序重新排列的过程。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序和归并排序等。

例子:快速排序

javascript 复制代码
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), pivot, ...quickSort(right)];
}

const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
const sortedArray = quickSort(unsortedArray);
console.log(sortedArray); // 输出 [1, 1, 2, 3, 6, 8, 10]

2. 查找算法:

查找是在数据集中寻找特定元素的过程。常见的查找算法有线性查找和二分查找。

例子:二分查找

javascript 复制代码
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; // 目标元素不存在
}

const sortedArray = [1, 3, 5, 7, 9];
const target = 5;
const result = binarySearch(sortedArray, target);
console.log(result); // 输出 2

3. 递归算法:

递归是一种通过将问题分解为更小的子问题来解决问题的方法。递归函数在解决问题时调用自身。

例子:计算阶乘

javascript 复制代码
function factorial(n) {
  if (n === 0) {
    return 1;
  }
  return n * factorial(n - 1);
}

const n = 5;
const result = factorial(n);
console.log(result); // 输出 120

4. 动态规划算法:

动态规划是一种通过将问题分解为子问题并存储子问题的解来解决复杂问题的方法。它通常用于优化问题,以减少计算时间。

例子:背包问题

javascript 复制代码
function knapsack(values, weights, capacity) {
  const n = values.length;
  const dp = Array.from({ length: n + 1 }, () => Array(capacity + 1).fill(0));

  for (let i = 1; i <= n; i++) {
    for (let w = 1; w <= capacity; w++) {
      if (weights[i - 1] <= w) {
        dp[i][w] = Math.max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1]);
      } else {
        dp[i][w] = dp[i - 1][w];
      }
    }
  }

  return dp[n][capacity];
}

const values = [60, 100, 120];
const weights = [10, 20, 30];
const capacity = 50;
const result = knapsack(values, weights, capacity);
console.log(result); // 输出 220

以上是四种常见算法的详细介绍和示例。排序、查找、递归和动态规划是计算机科学和编程中的基础,深入理解它们将有助于你更好地解决各种复杂问题。在实际编程中,选择正确的算法对于提高效率和性能至关重要。希望这些示例能帮助你更好地理解和应用这些算法。

相关推荐
码农水水27 分钟前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
MM_MS28 分钟前
Halcon基础知识点及其算子用法
开发语言·人工智能·python·算法·计算机视觉·视觉检测
大厂技术总监下海35 分钟前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
a程序小傲38 分钟前
小红书Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·后端·python·面试·职场和发展
hetao17338371 小时前
2026-01-06 hetao1733837 的刷题笔记
c++·笔记·算法
a努力。1 小时前
国家电网Java面试被问:最小生成树的Kruskal和Prim算法
java·后端·算法·postgresql·面试·linq
洛生&1 小时前
Counting Towers
算法
Evand J1 小时前
【MATLAB例程,附代码下载链接】基于累积概率的三维轨迹,概率计算与定位,由轨迹匹配和滤波带来高精度位置,带测试结果演示
开发语言·算法·matlab·csdn·轨迹匹配·候选轨迹·完整代码
X在敲AI代码1 小时前
LeetCode 基础刷题D2
算法·leetcode·职场和发展
源代码•宸1 小时前
Leetcode—1929. 数组串联&&Q1. 数组串联【简单】
经验分享·后端·算法·leetcode·go