[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

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验