常见的面试算法题:阶乘、回文、斐波那契数列

1.阶乘算法 Factorial

例如:给出数字5,对其以下的的每个数字相乘,结果等于120

解:递归 Recursive
function factorial(n) {// 如果n为0或1,阶乘是1if (n === 0 || n === 1) {return 1;}// 否则,返回n乘以n-1的阶乘return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出 120

虽然递归是一个直观的解决方案,但对于非常大的数字,递归可能导致栈溢出错误。对于更大的数字,你可以使用迭代方法来避免栈溢出

解:迭代 Iterative
function factorialIterative(n) {let result = 1;for (let i = 2; i <= n; i++) {result *= i;}return result;
}
console.log(factorialIterative(5)); // 输出 120

2.回文算法 Palindrome

实现一个检查回文的算法相对简单。回文是一个字符串,它从前往后读和从后往前读是一样的。下面是一个简单的实现:

解:使用系统自带的reverse函数
function isPalindrome(str) {// 移除非字母数字字符并转换为小写const cleanedStr = str.replace(/[\W_]/g, '').toLowerCase();// 检查清理后的字符串是否是回文return cleanedStr === cleanedStr.split('').reverse().join('');
}
// 使用示例
console.log(isPalindrome("A man, a plan, a canal, Panama")); // 应该输出 true
console.log(isPalindrome("racecar")); // 应该输出 true
console.log(isPalindrome("hello")); // 应该输出 false
解:不使用系统自带的reverse函数

这种方法不需要改变字符串本身,只需遍历到字符串的一半即可。

  • a.清理字符串:和之前一样,首先移除所有非字母数字的字符,并将所有字符转换为同一大小写。
  • b.手动比较字符:遍历清理后的字符串,直到中间位置。在每一步中,比较第 i 个字符和倒数第 i 个字符。如果这些字符在任何时候不匹配,函数应该返回 false。如果所有对应的字符都匹配,则字符串是回文。
function isPalindrome(str) {const cleanedStr = str.replace(/[\W_]/g, '').toLowerCase();const len = cleanedStr.length;for (let i = 0; i < len / 2; i++) {if (cleanedStr[i] !== cleanedStr[len - 1 - i]) {return false;}}return true;
}
// 使用示例
console.log(isPalindrome("A man, a plan, a canal, Panama")); // 应该输出 true
console.log(isPalindrome("racecar")); // 应该输出 true
console.log(isPalindrome("hello")); // 应该输出 false

3.斐波那契数列算法 Fibonacci

斐波那契数列是一个著名的数列,其中每个数字是前两个数字之和。数列以0和1开始,后续的数是通过加前两个数来得到的。在JavaScript中实现斐波那契数列有几种方法,包括递归、动态规划和闭包。

1.递归

递归是最直观的实现方式,但对于较大的数字效率较低,因为它包含了大量的重复计算。

function fibonacciRecursion(n) {if (n < 2) {return n;}return fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);
}
2.动态规划

动态规划方法存储了中间结果,避免了重复计算,因此效率更高。

function fibonacciDynamic(n) {let fib = [0, 1];for (let i = 2; i <= n; i++) {fib[i] = fib[i - 1] + fib[i - 2];}return fib[n];
}
3.闭包

使用闭包可以创建一个函数,记住之前计算的值,从而避免重复计算。

function fibonacciClosure() {let cache = [0, 1];return function fib(n) {if (cache[n] !== undefined) {return cache[n];}cache[n] = fib(n - 1) + fib(n - 2);return cache[n];}
}
const fib = fibonacciClosure();

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

whisper使用方法

看这个 github https://github.com/Purfview/whisper-standalone-win/tags下载 视频提取音频 ffmpeg -i 222.mp4 -vn -b:a 128k -c:a mp3 output.mp3截取4秒后的音频 ffmpeg -i output.mp3 -ss 4 -c copy output2.mp3使用 whisper-faster.exe 生成字幕 whisper-faster.exe …

卷积神经网络(VGG-19)灵笼人物识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型&#xff08;已打包好&#xff…

Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献

Zotero以其丰富的插件而闻名&#xff0c;使用起来十分的带劲&#xff0c;最重要的是它是免费的、不卡顿&#xff0c;不像某专业软件。 然而Zotero在word插入参考文献时&#xff0c;无法为参考文献添加超链接&#xff0c;这是一个不得不提的遗憾。 不过&#xff0c;有大佬已经…

Windows SDK

Windows SDK (10.0.22621) for Windows 11&#xff0c;版本 22H2 (2023 年 10 月更新) 提供了用于生成 Windows 应用程序的最新标头、库、元数据和工具。 使用此 SDK 为Windows 11版本 22H2 和早期 Windows 版本生成通用 Windows 平台 (UWP) 和 Win32 应用程序。 Windows 应用…

华纳云服务器怎么清理cdn缓存?

清理 CDN(内容分发网络)缓存通常需要通过 CDN 提供商的管理界面或 API 进行操作。不同的 CDN 提供商可能有不同的方法和步骤&#xff0c;以下是一个通用的清理 CDN 缓存的一般步骤&#xff1a; 1. 登录到 CDN 提供商的管理界面&#xff1a; 打开你所使用的 CDN 提供商的网站。 …

武汉凯迪正大KDHG-220P互感器综合测试仪

主要特点 武汉凯迪正大KDHG-220P互感器综合测试仪&#xff0c;仅需进行简单的数字设定&#xff1a;设定互感器的额定参数。仪器将全过程自动记录数据&#xff0c;并自动将变比极性、伏安特性曲线等计算并显示出来&#xff0c;省去换线、手动调压、人工记录、整理、描曲线等烦琐…

openAI API简介 怎么写提示词获取更好的结果。prompt-engineering使用指南。人工智能的重大里程碑事件及技术创新chatGPT1

OpenAI API 几乎可以应用于任何任务。 包括内容或代码生成、摘要、对话、创意写作、图片生成、文本语音互转等。 关键概念 文本生成&#xff1a;提示&#xff0c;输入越精准&#xff0c;输出越精准。 获得更好结果的几种策略&#xff1a; 1.写出清晰的指令&#xff1a;包含…

【图数据库实战】HugeGraph图计算流程

HugeGraph是一款易用、高效、通用的开源图数据库系统&#xff08;Graph Database&#xff0c;GitHub项目地址&#xff09;&#xff0c; 实现了Apache TinkerPop3框架及完全兼容Gremlin查询语言&#xff0c; 具备完善的工具链组件&#xff0c;助力用户轻松构建基于图数据库之上的…

Docker之虚悬镜像(查看、删除)

虚悬镜像: 仓库名、标签都是的镜像&#xff0c;俗称dangling image 查看 docker image ls -f danglingtrue删除 虚悬镜像已经失去存在价值&#xff0c;可以删除 docker image prune

Spring注解开发

注解开发 注解开发定义bean 使用Component定义bean 核心配置文件中通过组件扫描加载bean Spring提供Component注解的三个衍生注解 Controller&#xff1a;用于表现层bean定义Service&#xff1a;用于业务层bean定义Repository&#xff1a;用于数据层bean定义 纯注解开发 Spr…

C# static关键字详解

在C#中&#xff0c;static关键字有许多重要的用途。以下是关于如何使用static关键字的一些详细信息&#xff1a; 静态类&#xff08;Static Classes&#xff09;&#xff1a;静态类是不能实例化的类&#xff0c;它的所有成员都是静态的。静态类常常用作工具类或帮助类&#xff…

【双指针】快乐数

快乐数 文章目录 快乐数01 题目详细02 算法原理快慢指针 03 代码Java代码;C代码 01 题目详细 202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这…

c++模式之单例模式详解

c模式之单例模式详解 1.概念2.懒汉模式示例&#xff08;缺点&#xff09;3.懒汉模式线程安全4.饿汉式创建单例5.饿汉模式线程示例 1.概念 单例模式是指在整个系统生命周期内&#xff0c;保证一个类只能产生一个实例&#xff0c;确保该类的唯一性. 使用单例两个原因&#xff1a…

解决 requests 2.28.x 版本 SSL 错误

最近&#xff0c;在使用requests 2.28.1版本进行HTTP post传输时&#xff0c;您可能遇到了一个问题&#xff0c;即SSL验证失败并显示错误消息(Caused by SSLError(SSLCertVerificationError(1, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get loc…

Stream流常见操作

.stream() 常用方法 .forEach&#xff08;&#xff09; 该方法接收一个 Consumer 接口函数&#xff0c;会将每一个流元素交给该函数进行处理 .filter()&#xff1a;过滤 该接口接收一个 Predicate 函数式接口参数&#xff08;可以是一个Lambda或方法引用&#xff09;作为筛…

【FFmpeg实战】ffmpeg播放器-音视频解码流程

音视频介绍 音视频解码流程 FFmpeg解码的数据结构说明 AVFormatContext&#xff1a;封装格式上下文结构体,全局结构体,保存了视频文件封装格式相关信息AVInputFormat&#xff1a;每种封装格式&#xff0c;对应一个该结构体AVStream[0]&#xff1a;视频文件中每个视频&#xff…

二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性

在软件开发中&#xff0c;我们经常面临处理请求或事件的情况。有时候&#xff0c;我们需要将请求或事件依次传递给多个对象进行处理&#xff0c;但又不确定哪个对象最终会处理它。这时候&#xff0c;职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;就能派上…

LongAdder功能和原理

AtomicLong能保证并发情况下计数的准确性&#xff0c;其内部通过CAS来解决并发安全性的问题。 AtomicLong的缺点&#xff1a; 可以看到在高并发情况下&#xff0c;当有大量线程同时去更新一个变量&#xff0c;任意一个时间点只有一个线程能够成功&#xff0c;绝大部分的线程在尝…

自动驾驶学习笔记(十)——Cyber通信

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 Cyber通信 编写代码 编译程序 运行…

FISCOBCOS入门(十)Truffle测试helloworld智能合约

本文带你从零开始搭建truffle以及编写迁移脚本和测试文件,并对测试文件的代码进行解释,让你更深入的理解truffle测试智能合约的原理,制作不易,望一键三连 在windos终端内安装truffle npm install -g truffle 安装truffle时可能出现网络报错,多试几次即可 truffle --vers…