网易真题之回文序列
2016-09-13 14:23
183 查看
题目描述:
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{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; } }
相关文章推荐
- 网易真题之回文序列
- 网易2017秋招编程题----回文序列
- 网易笔试题:回文序列
- 网易2017秋招编程题:回文序列 [python]
- 网易2017校园招聘笔试题 回文序列
- 网易笔试题:回文序列
- 回文序列-2017网易校园招聘
- 网易2017校园招聘笔试题:回文序列
- 网易编程题一,回文序列(贪心法)
- 网易-回文序列
- python字符串split(),join(),strip()函数及网易笔试 回文序列
- 网易2017校园招聘笔试题 回文序列
- 网易2017秋招 回文序列
- 网易秋招编程题——回文序列
- 回文序列--网易2017秋招模拟考编程题1
- 算法导论--动态规划算法--求最长回文序列
- 最长子序列和回文字符串(动态规划)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)
- 【网易】最长公共子括号序列
- 网易面试题之回文数字组合最少次数