[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

相关文章

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

Java 操作 MinIO详细步骤

《Java操作MinIO详细步骤》本文详细介绍了如何使用Java操作MinIO,涵盖了从环境准备、核心API详解到实战场景的全过程,文章从基础的桶和对象操作开始,到大文件分片上传、预签名URL生成... 目录Java 操作 MinIO 全指南:从 API 详解到实战场景引言:为什么选择 MinIO?一、环境

Redis的安全机制详细介绍及配置方法

《Redis的安全机制详细介绍及配置方法》本文介绍Redis安全机制的配置方法,包括绑定IP地址、设置密码、保护模式、禁用危险命令、防火墙限制、TLS加密、客户端连接限制、最大内存使用和日志审计等,通... 目录1. 绑定 IP 地址2. 设置密码3. 保护模式4. 禁用危险命令5. 通过防火墙限制访问6.

VS Code中的Python代码格式化插件示例讲解

《VSCode中的Python代码格式化插件示例讲解》在Java开发过程中,代码的规范性和可读性至关重要,一个团队中如果每个开发者的代码风格各异,会给代码的维护、审查和协作带来极大的困难,这篇文章主... 目录前言如何安装与配置使用建议与技巧如何选择总结前言在 VS Code 中,有几款非常出色的 pyt

Python操作Excel的实用工具与库openpyxl/pandas的详细指南

《Python操作Excel的实用工具与库openpyxl/pandas的详细指南》在日常数据处理工作中,Excel是最常见的数据文件格式之一,本文将带你了解openpyxl和pandas的核心用法,... 目录一、openpyxl:原生 Excel 文件操作库1. 安装 openpyxl2. 创建 Exc

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2