今日头条笔试,第一题过了90%,想知道问题在哪

今日头条笔试,第一题过了90%,最后的10%想了好久也没过,是有什么特殊情况没考虑?想知道问题在哪

思路

把第一个与第二个数字的差作为T,每输入一个数字,拿前面数字(这个数字的索引不一定就是当前数字的索引减一)加T看判断与当前输入的数字相等不,不相等就拿当前数字减第一个数字的差作为新T,前一个数字的索引重新更新,相等的话前面数字的索引加一

代码

public static void main(String[] args)
{
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        for (int i = 0; i < N; i++) {
            int n = in.nextInt();
            long[] a = new long[n + 1];
            long T = 1;
            int start = 1;
            for (int j = 1; j <= n; j++) {
                a[j] = in.nextLong();
                if (j == 2) {
                    T = a[2] - a[1];
                    start = 2;
                }
                if (j > 2) {
                    if (a[start] + T == a[j]) {
                        start++;
                    } else {
                        start = 1;
                        T = a[j] - a[start];
                        start++;
                    }
                }
            }
            System.out.println(T);

        }
}
#笔试题目##春招##字节跳动#
全部评论
老哥一共得了多少分
点赞 回复 分享
发布于 2018-04-15 14:27
这题正解应该是KMP吧。你这个随便出一组数据都会超时。 比如。 a={1,2,3,4,5...99998,100000}
点赞 回复 分享
发布于 2018-04-15 20:46
                    if(a[start] + T == a[j]) {                         start++;                     }else{                         start =1;                         T = a[j] - a[start];                         start++;                     } 如果在start>2时,进入else分支,那么至少a[j-1]-a[start-1]验证过不是周期,但a[j-1]-a[1]肯定没验证到
点赞 回复 分享
发布于 2018-04-15 20:47
请问第二次笔试之后有收到面试通知的吗
点赞 回复 分享
发布于 2018-04-18 09:23

相关推荐

01-16 18:48
四川大学 Java
KalznAsawind:人问他哪一个是pdd,他倒介绍起来了。。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务