牛客网校招风暴周算法题-回文数列

2023-11-15

题目要求:
任意输入一个整数字符串,可以使任意相邻的两个数相加来构造回文数列,要求输入任意的整数数列,然后输出使它们相加次数最少得到的回文
数列{43},{36,54,36};例如:输入 1,3,9,7,2,2,1,1输出: 2
实例解析:为了得到回文数列,可以让2和1相加,然后让7和2相加,那么得到回文数列的最少相加次数为2,测试数据中包含多组输入
例如
8
1,3,9,7,2,2,1,1
7
1,3,5,2,3,3,1
输出
2
1
每个数列中整数的个数在1<=N<=50,每个数的大小范围是1<=M<=50000;


算法思想:

在给定的任意一个数列中,假设这个数列有n个元素,那么它形成回文数列的最大相邻两个数相加的次数为n-1,也就是说将这个序列的所有的数相加,但是要求最小相加的次数,还是要利用回文数列的对称性.假设有{ai,ai+1,ai+2,...,ak,...,ai+n}序列,我们比较这个序列两端的两个元素,aiai+n,假设该序列形成回文数列最少相加的次数为countn(n为数列的个数)则有:


利用对称性(最好是从数列的两端向里加,因为我们不知道数列的回文对称中心是具体的哪个数,或具体的两个数中间,或者这个数列可能没有回文对称中心)从两端向里加,一旦加到左右某一个字序列的和相等,说明这两个数是对称的,那么该序列的Count值可以在不变的情况下,序列长度变小.例如序列1,3,9,13,7,2,2,1,1的变化为:

1,3,9,13,7,2,2,1,1(Count=0)→3,9,13,7,2,2,1(Count=0)→9,13,7,2(Count=1)→13(count=2)那么可以知道这个数列的回文对称中心为13,最少相加2次。

代码如下:

#include<list>
#include<fstream>
#include<string>
#include<set>
#include<map>
using namespace std;

class solution{
public:
	int get_addition_number(vector<int>&num,int start,int end){
		if (start == end ||(num[start]==num[end]&&end-start==1)){
			return count;
		}
		else if (num[start] == num[end])get_addition_number(num,start+1,end-1);
		else if (num[start] > num[end]){//开始比结尾大
			num[end - 1] += num[end];
			count++;
			get_addition_number(num, start, end - 1);
		}
		else{
			num[start+1] += num[start];
			count++;
			get_addition_number(num, start + 1, end);
		}
	}
	int count;
};

int main(){
	int num, *ptr = NULL,tmp;
	cin >> num;
	vector<int>data;
	solution aa;
	aa.count = 0;
	for (; num >= 0;){
		if (0<=num&&num<=1){
			cout << 0 << endl;
			cin>>num;
			continue;
		}
		aa.count = 0;
		data.clear();
		for (int i = 0; i < num; i++){
			cin >> tmp;
			data.push_back(tmp);
		}
		cout << aa.get_addition_number(data,0,num-1) << endl;
		cin >> num;
	}
	return 0;
}
测试结果:



其中红色部分表示输出结果,当输入元素小于或等于1个时,则相加的次数为0,当数组中所有的元素相等时输出的结果为0.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客网校招风暴周算法题-回文数列 的相关文章

  • 面试总结(六):搜索索引

    问题导读 1 如何理解用户输入查询语句 2 如何根据得到的文档和查询语句的相关性 对结果进行排序 3 如何计算权重 Term weight 过程 4 如何判断Term之间的关系从而得到文档相关性 搜索索引到这里似乎我们可以宣布 我们找到想要
  • 为什需要采用增广拉格朗日函数

    为什需要采用增广拉格朗日函数 目标函数的可以转化为Lagrangian函数的最小 称之为对偶函数 dual function d
  • moveit是如何控制机械臂运动的

    确定机械臂的状态 MoveIt会读取机械臂的当前状态 包括关节角度 位置和速度等信息 获取规划请求 MoveIt会接收到一个规划请求 其中包含了机械臂需要执行的任务和目标 进行运动规划 MoveIt会对机械臂的当前状态和任务目标进行运动规划
  • Jsvc

    Jsvc How to detach the Java daemon from the shell script Toolbox for IT Groups How to detach the Java daemon from the sh
  • 学习多线程,创建多线程的三种方式

    多线程 并发与并行 并发 两个或多个事件在同一个时间段内发生 交替执行 并行 两个或多个事件在同一个时刻发生 同时执行 进程与线程 进程 进入到内存中的程序 线程 进程中的一个执行单元 负责当前进程中程序的执行 一个进程中至少有一个线程 一
  • 教你如何在VSCode中使用markdown标记语言并转为word

    目录 准备工作 正文开始 准备工作 插件 1 安装 pandoc https pandoc org installing html Windows用户进入官网后 直接点最大的那个按钮就行了 其他操作系统找到相应的下载点 这里我就不多讲了 实
  • 【解决】IDEA默认的代码格式化快捷键是失效

    Ctrl Alt L 网易云的快捷键 关掉网易云后 IDEA格式化快捷键就可以使用了
  • markdown表格合并单元格,嵌入HTML语法

    markdown的语法并不支持表格单元格合并 但可以通过嵌入HTML来解决 例如想实现这样的单元格合并效果 网络状态指示引脚的工作状态 引脚名 引脚工作状态 所指示的网络状态 NET STATUS 慢闪 200 ms 高 1800 ms 低
  • Java Scheduled定时任务

    开启定时任务步骤流程 1 在启动类添加注解 注意 千万不要忘记 EnableScheduling 2 在具体的方法上添加定时任务注解 Scheduled cron 0 0 3 每3个小时触发一次 3 定时任务开启时间 常用的 Schedul
  • SpringBoot集成Redis来实现缓存技术方案

    为什么80 的码农都做不了架构师 gt gt gt 概述 在我们的日常项目开发过程中缓存是无处不在的 因为它可以极大的提高系统的访问速度 关于缓存的框架也种类繁多 今天主要介绍的是使用现在非常流行的NoSQL数据库 Redis 来实现我们的
  • 【VS2010学习笔记】【异常处理】general error c1010070: Failed to load and parse the manifest.

    在VS2010编程中 有时编译会遇到这样的错误 general error c1010070 Failed to load and parse the manifest 解决方法就是在解决方案中将后缀名为manifest的文件删除 再编译即
  • css 第二行的元素设置margin-top间隔

    css 第二行的元素设置margin top间隔
  • Extjs的Form表单提交方式

    Extjs的Form表单提交方式 一 直接提交 url写在表单中 var addForm new Ext FormPanel frame true url insertProject eva doType insertProject lab
  • PCIe5.0的Add-in-Card(AIC)金手指layout建议(三)

    PCIe5 0的Add in Card AIC 金手指layout建议 一 PCIe5 0的Add in Card AIC 金手指layout建议 二 前面两篇文章介绍了第一种金手指的layout建议 适用速率在32 0 GT s 以下介绍
  • 关于爬虫技术

    1 什么是爬虫 爬虫是一种自动化程序 它能够模拟人类用户访问网站的行为 从网站上抓取数据并保存到本地或者进行进一步处理 爬虫是一种非常常用的网络数据采集工具 可以用于搜索引擎 电商数据采集 舆情监测等多个领域 通过使用爬虫 可以自动化地获取
  • springboot获取nacos的服务列表、实例列表及修改实例、发布配置等

    1 通过java sdk的方式发布配置 官方文档说明 https nacos io zh cn docs sdk html https nacos io zh cn docs open api html 1 1构造ConfigService
  • Linux系统中环境变量的设置

    目录 业务描述 设置环境变量的方法 系统环境变量 指定用户环境变量 临时有效的环境变量 系统常用环境变量应用分析 PATH 环境变量 HOME 环境变量 HISTSIZE 环境变量 LOGNAME环境变量 SHELL环境变量 业务描述 Li
  • 【JAVA进阶】File类、字节流

    个人主页 个人主页 系列专栏 JAVASE基础 前言 目前的编程中 数据存储方式有很多种 包括但不限于 文件存储 将数据以文件的形式存储在磁盘上 可以使用文件读写操作进行数据的存取 数据库存储 将数据以表格的形式存储在数据库中 可以使用SQ
  • 黑群晖docker安装人人影视_在云主机上手动安装腾讯PAI面板

    本文关键字 云主机上装管理面板 在前面 我们介绍过lnmp sandstorm paas 还有黑群晖 docker管理面板 这些都是云OS上的面板扩展和APPSTACK扩展 分散在不同级别被实现 像群晖这种是OS和面板一体的 包括这里要介绍
  • line-height的使用

    line height 26px 表示行高为26px line height 120 表示行高为当前字体大小的120 line height 2 6em 表示行高为当前字体的2 6倍 带单位的行高都有继承性 其子元素继承的是计算值 如父元素

随机推荐

  • 计算机盲打最快要多久,电脑打字怎样做到又快又准确

    除了熟悉26个字母 我们还要熟悉键盘 熟悉键盘是根本 可以下载个金山打字通练习下很快就上手了 而本文笔者着重给大家讲解下可以帮助自己快速输入的技巧 还是要利用工具的 我们聊天的时候 有的词语如果是你常用到的 而这个词又有点长 不是成语类的
  • ctfshow-网络迷踪-新手上路 ( 使用百度搜图收集景点信息)

    ctf show 网络迷踪模块第1关 只有一座桥的图片 拿到桥的名字即可 推荐使用百度搜图 先把图片下载到本地 使用百度搜图收集图片中的景点信息 根据搜图的结果可以发现 图片的来源均指向同一个地方 三亚蜈支洲岛 接下来 百度搜索 三亚蜈支洲
  • 死锁的讲解

    目录 1 死锁定义 2 死锁产生原因 3 如何解决死锁问题 1 死锁定义 死锁是指两个或两个以上的进程在执 过程中 由于竞争资源或者由于彼此通信 造成的 种阻塞的现象 若 外 作 它们都将 法推进下去 也就是两个线程拥有锁的情况下 在尝试获
  • 六、可解释性分析(Datawhale组队学习)

    文章目录 前言 理论简介 CAM算法 Lime算法 DFF算法 代码实战 torch cam工具包实战 pytorch gradcam工具包实战 captum工具包实战 shap工具包实战 lime工具包实战 总结 参考资料 本文内容为 同
  • alter table语法

    文档地址 http docs oracle com cd B19306 01 server 102 b14200 statements 3001 htm CIHCFDDJ ALTER TABLE Purpose Use the ALTER
  • shell脚本中的多行注释

    shell 中注释的使用方法 1 单行注释 单行注释最为常见 它是通过一个 来实现的 注意shell脚本的最开始部分 bin bash 的 号不是用来注释的 2 多行注释 在shell脚本中还有一种多行的注释方法 我们称之为 HERE DO
  • 机器视觉毕业设计 深度学习人体跌倒检测系统 - opencv python

    文章目录 0 前言 课题背景和意义 1 实现方法 传统机器视觉算法 基于机器学习的跌倒检测 SVM简介 SVM跌倒检测原理 算法流程 算法效果 深度学习跌倒检测 最终效果 网络原理 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不
  • 解决:报错cv2.error: OpenCV(4.1.2) error: (-215:Assertion failed) !_img.empty() in function ‘cv::imwrite‘

    cv2 error OpenCV 4 1 2 C projects opencv python opencv modules imgcodecs src l oadsave cpp 715 error 215 Assertion faile
  • 常见线性滤波(第一篇博客)

    一 基本概念了解 1 什么是图像滤波 官方解释 图像滤波 即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 是图像预处理中不可缺少的操作 其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性 个人理解 为图像滤波是通过设计
  • Kubernetes 101,第二部分,pod

    在上一篇文章中 我们了解了Kubernetes 的基础知识以及对其主要架构的介绍 介绍完毕后 就该探索如何在 Kubernetes 中运行应用程序了 容器包装器 在 Kubernetes 中 我们无法直接创建单个容器 相反 为了更好 我们可
  • 加工中心G76,G87,G83,G84数控代码讲解

    G76表示精密镗孔循环 具体使用格式如下面 G76 X Y Z R Q F
  • Linux Shell脚本字符串变量拼接与赋值总结

    Linux Shell脚本字符串总结 1 字符串拼接 2 定义值为双引号或单引号的字符串 3 在单引号和双引号字符串中取变量值 最近在工作用到shell脚本 用到了字符串变量的拼接 同时需要对字符串进行赋值 这里与大家分享一下 1 字符串拼
  • Android进阶知识树——应用进程的启动过程

    程序的启动是从进程启动开始的 换句话说只有程序进程启动后 程序才会加载和执行 在AMS启动程序时首先会判断当前进程是否启动 对未启动的进程会发送请求 Zygote在收到请求后创建新的进程 1 Zygote监听客户端请求 由Android进阶
  • 猿创征文|Java开发工具,从环境到开发,一篇管够!

    文章目录 一 文章背景 二 环境 开发工具 1 安装Docker 2 配置 Docker 阿里镜像加速器 3 使用docker运行Mysql 8 4 使用Docker运行Redis 5 数据库管理工具 6 接口测试工具 7 代码版本管理工具
  • Unity触控——单指、双指、Windows大屏多人触控

    前段时间做了个Windows系统的大屏触控程序 最多同时支持十点触控 并且在各自的小窗口中要分别处理 即每个小窗口中的触点为一个处理组 判断其单点或多点操作 按以往移动端程序的触屏事件Input GetTouch int index 不满足
  • 如何优雅做好项目管理?

    导言 项目本身无好坏之分 项目管理有做好与做坏之别 在互联网大厂的体制下 想要做坏一个项目很难 可以通过换人 追加资源等方式消除风险 想要做好一个项目不容易 需要团队及PM付出大量心血和精力 在这些做好的项目中 我们也观察到很多PM做的疲惫
  • TVM编译pytorch模型

    编译PyTorch模型 加载预训练的PyTorch模型 加载测试图像 将图形导入到Relay 构建Relay 在TVM上执行可移植图形 查找同义词集名称 本文是介绍如何使用Relay部署PyTorch模型的入门教程 首先 应该安装PyTor
  • 全国计算机等级考试题库二级C操作题100套(第62套)

    第62套 给定程序中 函数fun的功能是 把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置 最右边被移出字符串的字符绕回放到第一个奇数位置 下标为偶数的字符不动 注 字符串的长度大于等于2 例如 形参s所指的字符串为 abcdefg
  • [hihoCoder] 压缩字符串 解题报告

    时间限制 10000ms 单点时限 1000ms 内存限制 256MB 描述 小Hi希望压缩一个
  • 牛客网校招风暴周算法题-回文数列

    题目要求 任意输入一个整数字符串 可以使任意相邻的两个数相加来构造回文数列 要求输入任意的整数数列 然后输出使它们相加次数最少得到的回文 数列 43 36 54 36 例如 输入 1 3 9 7 2 2 1 1输出 2 实例解析 为了得到回