网易笔试题

回文数那题,通过 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;
        }
    }
}
#网易#
全部评论
我是这么写的 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) {//注意while处理多个case int n = in.nextInt(); int[] num=new int[n]; int count=0; for(int i=0;i<n;i++){ num[i]=in.nextInt(); } int front=0; int end=n-1; while(front<end){ int sum=num[end]-num[front]; while(sum!=0&&end-front!=1){ if(sum>0){ sum=sum-num[++front]; count++; } else{ sum=sum+num[--end]; count++; } } if(sum!=0&&end-front==1){ count++; } front++; end--; } System.out.println(count); } } }
点赞 回复 分享
发布于 2016-09-12 21:53
可以用ide吗?
点赞 回复 分享
发布于 2016-09-12 23:27
你们好叼,我才20%
点赞 回复 分享
发布于 2016-09-12 22:31

相关推荐

03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务