网易笔试题
回文数那题,通过 80%,不知道哪里不对
import java.util.Scanner;
/**
* Created by ivanchou on 9/12/16.
*/
public class NetEasyThree {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
System.out.println(new NetEasyThree().solve(nums));
}
}
public int solve(int[] nums) {
int count = 0;
int p = 0, q = nums.length - 1;
if (isPalindrome(nums, p, q)) {
return 0;
}
while (p < q) {
if (nums[p] == nums[q]) {
p++;
q--;
} else if (nums[p] > nums[q]) {
q--;
nums[q] += nums[q + 1];
count++;
} else if (nums[p] < nums[q]) {
p++;
nums[p] += nums[p - 1];
count++;
}
if (isPalindrome(nums, p, q)) {
return count;
}
}
return count;
}
public boolean isPalindrome(int[] nums, int p, int q) {
// 数组长度为 0 或者 1 本身就是回文数列
int length = q - p + 1;
if (length == 0 || length == 1) {
return true;
}
// 数组长度为 2 最多执行一次操作
if (length == 2) {
if (nums[p] != nums[q]) {
return false;
} else {
return true;
}
}
int i = p;
for (; i < (q + 1) / 2; i++) {
if (nums[i] != nums[q - i]) {
break;
}
}
if (i >= (q + 1) / 2) {
return true;
} else {
return false;
}
}
}
#网易#