[编程题] 回文序列
2017-09-03 14:02
204 查看
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
输入描述:
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50)
第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。
输出描述:
输出一个数,表示最少需要的转换次数
输入例子1:
4
1 1 1 3
输出例子1:
2
解题思路
因为只需要统计交换的次数,因此可以定义两个指针,一个指向数组头部,一个指向数组的尾部。
当首部小于尾部的时候,如1 1 1 3,将首部指针的值累加到首部指针下一个位置,即1 2 1 3,同时将首部指针加1。
尾部同理处理。
统计次数即可。
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
输入描述:
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50)
第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。
输出描述:
输出一个数,表示最少需要的转换次数
输入例子1:
4
1 1 1 3
输出例子1:
2
解题思路
因为只需要统计交换的次数,因此可以定义两个指针,一个指向数组头部,一个指向数组的尾部。
当首部小于尾部的时候,如1 1 1 3,将首部指针的值累加到首部指针下一个位置,即1 2 1 3,同时将首部指针加1。
尾部同理处理。
统计次数即可。
import java.util.Scanner; public class Main { private static int fun(int[] data) { int count = 0; int start = 0, end = data.length - 1; while (start < end) { if (data[start] < data[end]) { data[start + 1] += data[start]; start++; count++; } else if (data[start] > data[end]) { data[end - 1] += data[end]; end--; count++; } else { start++; end--; } } return count; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] data = new int ; for (int i = 0; i < n; i++) data[i] = sc.nextInt(); System.out.println(fun(data)); } }
相关文章推荐
- 网易编程题一,回文序列(贪心法)
- 网易秋招编程题——回文序列
- 算法编程题:回文序列
- 【Python】 易笔试编程题(回文序列)
- [编程题] 回文序列
- 网易2017秋招编程题:回文序列 [python]
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
- 编程之美资格赛 第二题 回文字符序列 dp
- 【编程之美】题目2 : 回文字符序列
- [编程题] 操作序列
- 2016百度实习编程题:括号序列
- 剑指Offer—编程题24(二叉搜索树的后序遍历序列)
- 最长回文子序列与最长回文子串
- 求字符串最长不连续回文序列的深入研究
- ACM解题之回文序列
- 算法编程题积累(3)——腾讯笔试"构造回文“问题
- 网易真题之回文序列
- 判断字符序列是否为回文
- 判断回文序列
- 最长子序列回文问题,Longest Palindromic Subsequence