百度9.3笔试编程题3道

老早投了深圳的Java开发岗,筛完了简历也没面试,现在应该是进到正式批了,今天面试发现自己果然还是很菜啊。三道题没有一道OC的。
19个选择题,选择题也挺有分量的,有好几个算时间空间复杂度的,好几个SQLyuj还有AVL树

第一题,能被90整除的最大数

给你一些数字,不是0就是5,问你能用这些数字凑出的最大可以被90整除的数是多少
我的思路是每9个5凑出的数(555555555)是可以整除9的,那后面再添0就可以了。
如果没有给0,那么必然不能整除,返回-1。
最后是通过了90%,百思不得解。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int zeros = 0;
        int fives = 0;
        for (int i = 0; i < n; i++) {
            if(scanner.nextInt()==5)
                fives ++;
            else
                zeros ++;
        }
        if(zeros == 0) {
            System.out.println(-1);
            return;
        }
        int maxFives = fives - fives%9;
        StringBuilder sb= new StringBuilder();
        for (int i = 0; i < maxFives; i++) {
            sb.append("5");
        }

        for (int i = 0; i < zeros; i++) {
            sb.append("0");
        }
        System.out.println(sb.toString());
    }
}

第二题,优质奶牛

  • 有T组测试用例
    • 每组测试用例有n个奶牛,m个条件
      • 满足条件的牛以区间的形式给出。
      • 满足全部条件才是优质奶牛。

思路:

  • 刚开始的时候是想用一个长度为n的数组存满足的条件数,数目=m则是优质,然后计数返回,但是提示超时,然后用ArrayList<int[]> 区间的方式处理,还是超时,我估计是代码循环哪里有问题,实在想不出,也没办法了。
    跑不出结果的代码如下:
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = Integer.parseInt(scanner.nextLine());
        StringBuilder ssb= new StringBuilder();
        for (int i = 0; i < T; i++) {
            // 每组测试
            String[] nm = scanner.nextLine().split(" ");
            int n = Integer.parseInt(nm[0]);
            int m = Integer.parseInt(nm[1]);
            ArrayList<int[]> goodCows = new ArrayList<>();
            goodCows.add(new int[]{0,n-1});
            for (int j = 0; j < m; j++) {
                // 每个特性
                int k = Integer.parseInt(scanner.nextLine());
                ArrayList<int[]> ngc = new ArrayList<>();
                for (int l = 0; l < k; l++) {
                    //每个特性的范围
                    String[] se = scanner.nextLine().split(" ");
                    int start = Integer.parseInt(se[0]);
                    int end =Integer.parseInt(se[1]);
                    for (int[] ints : goodCows) {
                        int rstart = ints[0];
                        int rend = ints[1];
                        int mstart = Math.max(rstart, start);
                        int mend = Math.min(rend, end);
                        if (mstart <= mend)
                            ngc.add(new int[]{mstart, mend});
                    }
                }
                goodCows = ngc;
            }
            int t = 0;
            StringBuilder sb= new StringBuilder();
            for (int[] group : goodCows){
                int s = group[0];
                int e = group[1];
                t += e-s+1;
                for (int j = s; j <= e; j++) {
                    sb.append(j+1).append(" "
                    );
                }
            }
            ssb.append(t).append("\n").append(sb.toString().trim()).append("\n");
        }
        System.out.print(ssb.toString());
    }
}

第三题,走台阶

有n个台阶,每次可以走1~m步,且第i步的长度不能和第i-1、第i-2一样。要恰好走完,问有多少种走法,以10e9+7取模。
应该是在LeetCode见过这题,但是忘记了,暴力搜索pass了40%。

import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        go(0,0,n,m);
        System.out.println(count);
    }

    private static int count = 0;
    private static void go(int last1,int last2,int remain,int m){
        if(remain <0)
            return;
        if(remain ==0) {
            count++;
            if(count > 10e9+7)
                count -=10e9+7;
        }
        for (int i = 1; i <= m; i++) {
            if(i == last1 || i == last2)
                continue;
            go(last2,i,remain-i,m);
        }
    }
}
#百度##笔试题型#
全部评论
第一题你思路错了,结果中每个位数上数字之和%9==0就行了,先判断0的数量必须>0,否则返回-1;你的maxFives = fives - fives%9;改为maxFives = fives/9;最后遍历5,条件是i<maxFives*9,最后遍历0
点赞 回复 分享
发布于 2020-09-07 22:14
感觉你第一题是不是没有考虑全0啊,比如我给的卡片是0 0 0 你代码输出的就是000,实际上应该是0吧
点赞 回复 分享
发布于 2020-09-04 15:35

相关推荐

吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
点赞 评论 收藏
分享
关于我大学本科四年,想了很多,但还是不知道该怎么动笔&nbsp;“大学四年,是我从懵懂少年走向职场青年的转折期。这一路跌跌撞撞,有迷茫,有遗憾,也有成长和决心。”&nbsp;大一刚进来时仍然有高中那股学习劲,经常一个人去图书馆学高等数学,但后面劲头一过便开始在宿舍开启躺平生活(现在想想那段时间真的很爽,无忧无虑)。由于大一担任班干部,所以经常要跟其他班的班干部交流,在此期间认识了隔壁班的一位女生,短发而很可爱,因为很多团建还有比赛都是我们两班一起参加的,而且我和她都是负责人,所以交集很多,后面慢慢地彼此对产生了好感,所以在大一刚开学的2个月后,我们在一起了,彼此之前都是初恋。但当时我真的是太太太直男了,对感情的想...
真烦好烦真烦:骗哥们可以,别把你自己也骗到了就行。哥们被你骗了真无所谓的,打个哈哈就过了。但希望你打完这段话后擦一下眼角,别让眼泪掉在手机屏幕上了就行。你说的这些话,哥们信一下也是没什么的。还能让你有个心里安慰,但这种话说出来骗骗兄弟就差不多得了,哥们信你一下也不会少块肉,但是你别搞得自己也当真了就行。哥们被你骗一下是真无所谓的,兄弟笑笑也就过去了。真不是哥们想要破你防,你擦擦眼泪好好想想,除了兄弟谁还会信你这些话?
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客企业服务