[Algorithm][综合训练][求最小公倍数][跳台阶][最长回文子串]详细讲解

本文主要是介绍[Algorithm][综合训练][求最小公倍数][跳台阶][最长回文子串]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.求最小公倍数
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.跳台阶
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.最长回文子串
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.求最小公倍数

1.题目链接

  • 求最小公倍数

2.算法原理详解 && 代码实现

  • 最小公倍数:两数乘积 / 最大公因数
  • 最大公因数:辗转相除法
    • 原理GCD(a, b) == GCD(b, a % b)
    // 非递归版本
    int GCD(int a, int b)
    {while(b != 0){int tmp = b;b = a % b;a = tmp;}return a;
    }int GCD(int a, int b)
    {int tmp = 0;while(a % b){tmp = a % b;a = b;b = tmp;}return b;
    }// 递归版本
    int GCD(int a, int b)
    {if(b == 0){return a;}return GCD(b, a % b);
    }
    
  • 代码
    #include <iostream>
    using namespace std;int GCD(int a, int b)
    {if(b == 0){return a;}return GCD(b, a % b);
    }int main()
    {int a = 0, b = 0;cin >> a >> b;cout << (a * b / GCD(a, b)) << endl;return 0;
    }
    

2.跳台阶

1.题目链接

  • 跳台阶

2.算法原理详解 && 代码实现

  • 自己的版本
    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {int n = 0;cin >> n;vector<int> dp(n + 1, 0);dp[1] = 1, dp[2] = 2;for(int i = 3; i <= n; i++){dp[i] = dp[i - 1] + dp[i - 2];}cout << dp[n] << endl;return 0;
    }
    
  • 优化版本:相较于自己的版本,多了滚动数组进行空间优化
    #include <iostream>
    using namespace std;int main()
    {int n = 0;cin >> n;int a = 1, b = 2, c = 2;for(int i = 3; i <= n; i++){c = a + b;a = b;b = c;}if(n == 0 || n == 1){cout << n << endl;}else{cout << c << endl;}return 0;
    }
    

3.最长回文子串

1.题目链接

  • 最长回文子串

2.算法原理详解 && 代码实现

  • 自己的版本:动态规划 --> 时间/空间复杂度均为 O ( N 2 ) O(N^2) O(N2)
    int getLongestPalindrome(string A) 
    {int n = A.size();vector<vector<bool>> dp(n, vector<bool>(n, false));int len = 1;for(int i = n - 1; i >= 0; i--){for(int j = 0; j < n; j++){if(A[i] == A[j]){// i + 1 < j -> 表示至少有三个字符或以上dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;if(dp[i][j] && j - i + 1 > len){len = j - i + 1;}}}}return len;
    }
    
  • 优化版本:中心扩展算法 --> 时间复杂度 O ( N 2 ) O(N^2) O(N2),空间复杂度 O ( 1 ) O(1) O(1)
    • 枚举中心位置的时候,要考虑回文串长度的奇偶性
    int getLongestPalindrome(string A) 
    {int n = A.size(), len = 1;for(int i = 1; i < n; i++) // 枚举每个中心点{// 当长度是奇数时int left = i - 1, right = i + 1;while(left >= 0 && right < n && A[left] == A[right]){left--;right++;}len = max(len, right - left - 1);// 当长度是偶数时left = i - 1, right = i;while(left >= 0 && right < n && A[left] == A[right]){left--;right++;}len = max(len, right - left - 1);}return len;
    }
    

这篇关于[Algorithm][综合训练][求最小公倍数][跳台阶][最长回文子串]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101946

相关文章

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主