网易真题之回文序列
题目描述:
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
分析:
比较第一个和最后一个,如果第一个大,则最后两个相加替换原来位置。如果首尾元素相等,则删除首尾元素。
package project001; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main07 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int nums = in.nextInt(); List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<nums;i++){ list.add(in.nextInt()); } System.out.println(getSum(list)); } public static int getSum(List<Integer> list){ if(list.size()<=1) return 0; int operation = 0; while(list.size()>1){ if(list.get(0)>list.get(list.size()-1)){ int a = list.get(list.size()-2); int b = list.get(list.size()-1); list.set(list.size()-2, a+b); list.remove(list.size()-1); operation++; }else if(list.get(0)<list.get(list.size()-1)){ int a = list.get(0); int b = list.get(1); list.set(0, a+b); list.remove(1); operation++; }else{ list.remove(0); list.remove(list.size()-1); } } return operation; } }
联系方式:wuchaodzxx@126.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构