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

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

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

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

相关推荐
秋难降10 分钟前
LRU缓存算法(最近最少使用算法)——工业界缓存淘汰策略的 “默认选择”
数据结构·python·算法
tkevinjd17 分钟前
图论\dp 两题
leetcode·动态规划·图论
Dignity_呱1 小时前
如何在不发版时,实现小程序的 AB 测试?
前端·面试·微信小程序
CoovallyAIHub2 小时前
线性复杂度破局!Swin Transformer 移位窗口颠覆高分辨率视觉建模
深度学习·算法·计算机视觉
点云SLAM2 小时前
Eigen中Dense 模块简要介绍和实战应用示例(最小二乘拟合直线、协方差矩阵计算和稀疏求解等)
线性代数·算法·机器学习·矩阵·机器人/slam·密集矩阵与向量·eigen库
renhongxia12 小时前
大模型微调RAG、LORA、强化学习
人工智能·深度学习·算法·语言模型
DdduZe3 小时前
8.19作业
数据结构·算法
PyHaVolask3 小时前
链表基本运算详解:查找、插入、删除及特殊链表
数据结构·算法·链表
高山上有一只小老虎3 小时前
走方格的方案数
java·算法