贝壳 提前批 Java研发 笔经(已凉)

2020.08.11 晚上 笔试 2h

1)回文串构造

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String num = sc.nextLine();
        String str = sc.nextLine();
        int ans = 0;
        int n = Integer.valueOf(num);
        int left = 0, right = n - 1;
        while(left < right) {
            if(str.charAt(left++) != str.charAt(right--)) {
                ans++;
            }
        }

        System.out.println(ans);
    }
}


2)方格染色

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        int[] a = new int[t];
        for (int i = 0; i < t; i++) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            if(n == 1 && m == 1) {
                a[i] = 1;
                continue;
            }
            if(n % 2 == 0 || m % 2 == 0) {
                a[i] = 2;
                continue;
            }
            if(n % 3 == 0 || m % 3 == 0) {
                a[i] = 3;
                continue;
            }
            if(n == 1 || m == 1) {
                for (int j = 5; j <= Math.max(n, m); j++) {
                    if(j % 2 == 0 || j % 3 == 0) {
                        continue;
                    }
                    if(n % j == 0 || m % j == 0) {
                        a[i] = j;
                        break;
                    }
                }
                continue;
            }

            for (int j = 5; j <= Math.min(n, m); j++) {
                if(j % 2 == 0 || j % 3 == 0) {
                    continue;
                }
                if(n % j == 0 || m % j == 0) {
                    a[i] = j;
                    break;
                }
            }
        }

        for(int num : a) {
            System.out.println(num);
        }
    }
}


3)最大子段或

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        int res = Integer.MAX_VALUE;
        int max = 0;
        for (int i = 0; i < n; i++) {
            int tmp = 0;
            for (int j = i; j < n; j++) {
                tmp = tmp | a[j];
                if(tmp >= max) {
                    max = tmp;
                    res = Math.min(res, j - i + 1);
                }
            }
        }
        System.out.println(res);
    }
}


第一题100%,第二题100%,第三题暴力0%,第四题没做,菜是原罪。

#贝壳找房##校招##Java工程师##笔经#
全部评论
第三题一样的思路,果然0%
点赞 回复
分享
发布于 2020-08-11 22:16
第二题必须把所有数据处理完再输出吗?不可以处理一组输出一行吗?
点赞 回复
分享
发布于 2020-08-12 09:03
联易融
校招火热招聘中
官网直投
第三题暴力40,求全解
点赞 回复
分享
发布于 2020-08-12 10:43
我第三题一开始也是这样写,可以通过50%,后面改了一下,还是暴力,不过ac了
点赞 回复
分享
发布于 2020-08-12 16:35
你直接在输入循环里把所有输入或起来就是最大值了,然后优化一下,保存一下数组的最大值,如果数组最大值和或最大值相等就输出1,然后两层循环遍历所有子区间,寻找最短就好了
点赞 回复
分享
发布于 2020-08-12 17:22
请问你是线上笔试还是线下呀
点赞 回复
分享
发布于 2021-04-12 11:29

相关推荐

1 4 评论
分享
牛客网
牛客企业服务