网易笔试题

回文数那题,通过 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-10 17:28
门头沟学院 Java
1.&nbsp;代码考核题1:找出长度最小的子数组2.&nbsp;代码考核题2:SQL题目,涉及两张表连接、按日期分组计算人均PV3.&nbsp;请做一个自我介绍4.&nbsp;你的项目是学校课程作业还是自己学习的?具体介绍一下项目来源5.&nbsp;你的商城项目考虑了高并发,说一下整体架构设计思路6.&nbsp;说一下你的部署方案7.&nbsp;解释一下JWT&nbsp;+&nbsp;Redis双token机制的工作原理,以及相比传统session登录的优势8.&nbsp;Redis有几种数据结构,各种数据结构的特点和优缺点是什么?9.&nbsp;为什么使用Redis&nbsp;+&nbsp;Lua脚本来扣减库存?10.&nbsp;在Lua脚本里面怎么定义一个变量?11.&nbsp;订单和库存的数据一致性是怎么保证的?是什么级别的一致性(最终一致性还是实时一致性)?12.&nbsp;多级缓存(Caffeine&nbsp;+&nbsp;Redis)架构存在哪些问题?分布式部署时又会遇到什么问题?13.&nbsp;订单智能释放使用了RocketMQ延迟消息+定时任务兜底方案,为什么不能只用RocketMQ延迟消息?14.&nbsp;如果项目运行中接口突然变慢,怎么去查找问题所在并解决?15.&nbsp;你的Agent项目是怎么做的?有没有知识库训练?16.&nbsp;意图判断和意图识别是怎么处理的?17.&nbsp;prompt是谁写的?是内置的还是用户自己写?18.&nbsp;你们有统一的家居行业知识库吗?是给大模型提前训练还是有现成的针对家居的抓手大模型?19.&nbsp;你是怎么使用AI&nbsp;coding的?第一次面试,准备得很不充分,刚上来就是代码题有点紧张。面试官是s3的,难道技术提前批都是去s3?感觉基本寄了,上来直接问部署细节(我本来想答K8s,docker之类的但不熟就没说)+&nbsp;语法细节,很明显就知道项目不是我从头到尾自己手搓的(我说用了AI&nbsp;coding)没有问八股(很奇怪),一直在拷打项目,答得整体一般
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务