如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
import java.util.Scanner;
public class Main {
public static boolean check(int[] num,int mid){
int i = mid;
int j = mid;
//System.out.println(mid);
for(;i>0 && j<num.length-1;i--,j++){
if(num[i] != num[j]) return false;
if(num[i]==-1&&num[i]==num[j]) break;
}
return true;
}
public static int Solution(int[] num){
int counts = 0;
int i = 0;
int j = num.length-1;
while(i < j){
if(num[i] < num[j]){
num[i+1] += num[i];
num[i] = 0;
i++;
counts++;
}
else if(num[i] > num[j] ){
num[j-1] += num[j];
num[j] = 0;
j--;
counts++;
}else {
i++;
j--;
}
}
return counts;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
int n = cin.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = cin.nextInt();
}
System.out.println(Solution(arr));
}
}
}