[Algorithm][综合训练][小葱的01串][小红的ABC][不相邻取数]详细讲解

2024-08-28 07:12

本文主要是介绍[Algorithm][综合训练][小葱的01串][小红的ABC][不相邻取数]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.小葱的01串
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.小红的ABC
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.不相邻取数
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.小葱的01串

1.题目链接

  • 小葱的01串

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

  • 解法:滑动窗口 --> ⻓度固定的滑动窗⼝,要想符合要求,必定是⼀半⼀半的
    • 选择区域的时候,仅需选择长度为字符串长度一半即可
  • 细节:没有必要考虑环的问题,因为实际上在一个循环内,如果该部分符合要求,那么剩下的部分也符合要求,所以不用考虑环
    • 一个循环内找到一个符合要求的结果时,直接ret += 2即可
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {int n = 0;string str;cin >> n >> str;int sum[2] = { 0 }; // 统计字符串中所有0和1的个数for(auto& ch : str){sum[ch - '0']++;}int left = 0, right = 0, ret = 0, half = n / 2;int cnt[2] = { 0 }; // 统计窗口内0和1的个数while(right < n - 1) // 细节{cnt[str[right] - '0']++;while(right - left + 1 > half){cnt[str[left++] - '0']--;}if(right - left + 1 == half){if(cnt[0] * 2 == sum[0] && cnt[1] * 2 == sum[1]){ret += 2;}}right++;}cout << ret << endl;return 0;
    }
    

2.小红的ABC

1.题目链接

  • 小红的ABC

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

  • 自己的版本:动态规划
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;int main()
    {string str;cin >> str;int n = str.size();vector<vector<bool>> dp(n, vector<bool>(n, false));int minLen = 101;for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(str[i] == str[j]){dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;int len = j - i + 1;if(dp[i][j] && len < minLen && len > 1){minLen = len;}}}}cout << (minLen == 101 ? -1 : minLen )<< endl;return 0;
    }
    
  • 优化版本:找规律 --> 仅需判断长度为2以及长度为3的子串是否是回文串即可
    #include <iostream>
    #include <string>
    using namespace std;int main()
    {string str;cin >> str;int n = str.size();int ret = -1;for(int i = 0; i < n; i++){if(i + 1 < n && str[i] == str[i + 1]) // 判断⻓度为2的⼦串{ret = 2;break;}if(i + 2 < n && str[i] == str[i + 2]) // 判断⻓度为 3 的⼦串{ret = 3;}}cout << ret << endl;return 0;
    }
    

3.不相邻取数

1.题目链接

  • 不相邻取数

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

  • 思路:[简单多状态]动态规划 -> 打家劫舍
    • 状态表示
      • f[i]:从前i个数挑选,最后一个位置必选,此时的最大和
      • g[i]:从前i个数挑选,最后一个位置不选,此时的最大和
    • 状态转移方程
      • f[i] = g[i - 1] + nums[i]
      • g[i] = max(f[i - 1], g[i - 1])
    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {int n = 0;cin >> n;vector<int> nums(n + 1, 0);for(int i = 1; i <= n; i++){cin >> nums[i];}vector<int> f(n + 1, 0), g(n + 1, 0);for(int i = 1; i <= n; i++){f[i] = g[i - 1] + nums[i];g[i] = max(f[i - 1], g[i - 1]);}cout << max(f[n], g[n]) << endl;return 0;
    }
    

这篇关于[Algorithm][综合训练][小葱的01串][小红的ABC][不相邻取数]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve