阿里0325笔试情况

https://blog.csdn.net/weixin_44484668/article/details/123470439
单选题6个,每题2分,各个类型都有,比较简单。
多选题6个,每题4分,少选给1/3分,也不难,就是有的会比较纠结
编程题三道,一道easy,一道medium,一道hard。
第一题简单字符串模拟(14分),问密码情况,满足三个条件:

比较坑的点在于输出这些英文容易输错(可以cv),ACM模式下很多人不会正确的输入输出导致只有80%正确率,比如int后需要接受空格,字符串可能存在空格的情况。
关于java在ACM中的输入输出可以看我的这篇文章
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        String next = sc.nextLine();
        HashSet<String> set = new HashSet<>();
        for (int i = 0; i < t; i++) {
            String str = sc.nextLine();
            if (str.length() < 5 || str.length() > 12) System.out.println("字符串长度不合法");
            else if (!isLetter(str)) System.out.println("非全英文字符串");
            else if (set.contains(str)) System.out.println("字符串存储过了");
            else {
                set.add(str);
                System.out.println("合法字符串");
            }
        }
    }

    private static boolean isLetter(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isLetter(str.charAt(i))) return false;
        }
        return true;
    }
}


第二题(20分),没做出来,自己太菜了,做题也少。这道题看着挺简单的,然后0%通过就懵了,时间都花在第二题了,导致第三题没时间做。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int i = 0; i < t; i++) {
            int[] nums = new int[5];
            for (int j = 0; j < 5; j++) {
                nums[j] = sc.nextInt();
            }
            Arrays.sort(nums);
//            System.out.println(min1 + "\t" + min2 + "\t" + min3);
            int res = 0;
            if (nums[1] == nums[2]) {
                res = nums[1];
            } else {
                res = nums[1] + Math.min(nums[0], nums[2] - nums[1]);
            }
            System.out.println(res);
        }
    }
0分,没想通。

第三题(30分)背包问题,参考大佬的题解,发现确实是01背包问题,不过贪心也可以过一些案例。
思路是只要斜率k=-a/b不一样,那么两条直线必相交。用一个map存储斜率和对应的条数,比如[1-2],[2-3],[3-4],那么就和力扣416. 分割等和子集494. 目标和1049. 最后一块石头的重量 II这几道题一样了。
只有两个颜色,所以将对应的条数分为两堆,一堆为x(白色),一堆为y(黑色),题目要求xy最大,当且仅当x==y时最大,但是背包问题不一定满足两堆个数一样,所以最后结果就是x(sum-x)。
不得不说背包用来求子集划分问题还是很好用的。

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        //key-斜率,value-个数
        HashMap<Double, Integer> map = new HashMap<>();
        for (int i = 0; i < t; i++) {
            int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt();//c没用
            double k = 1.0 * a / b;//用double,int会把1.1和1.9斜率算成一样
            map.put(k, map.getOrDefault(k, 0) + 1);
        }
        int sum = 0, n = map.size();
        int[] weight = new int[n], values = new int[n];
        int index = 0;
        for (Map.Entry<Double, Integer> entry : map.entrySet()) {
            sum += entry.getValue();
            weight[index] = entry.getValue();
            values[index] = entry.getValue();
        }
        int w = sum / 2;
        //dp[n][w]:针对所有的条数,不超过一半和的最大和,比如[1,3,3],凑不超过3的最大和,就是[3]了,所以一堆是3,一堆是4,结果12.
        //dp[i][j]:前i个物品,第i个物品的重量是weight[i],价值是value[i],背包容量是j,求最大价值。
        int[][] dp = new int[n + 1][w + 1];
        //base case
        //dp[0][...]=0;
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= w; j++) {
                if (j >= weight[i - 1]) {//能够装下第i个物品
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + values[i - 1]);
                } else {
                    dp[i][j] = dp[i - 1][j];//装不下第i个物品
                }
            }
        }
        System.out.println(dp[n][w] * (sum - dp[n][w]));//一堆和是x,一堆和是y
    }
}


这题我暴力就过了10%的案列,第二题懵了,第三题没时间看。
总结下来就是,时间没分配到位,选择题还检查了一遍(我也服了),以为最后一道题肯定hard所以就放弃了,但是这个确实还是比较接近leetcode原题的,给时间想想应该能想到,或者过多一些case,当然最主要还是太菜了。

#阿里笔试##笔试题目##阿里巴巴#
全部评论
hhh和我一样,第二题找不到反例,一提交0%通过
1 回复 分享
发布于 2022-03-25 22:07
我之前好像做哪家笔试的时候做过,好像就是先排序从小到大,答案就是a[1]+Math.min(a[0], a[2]-a[1])吧
点赞 回复 分享
发布于 2022-04-14 13:50
笔试的时候同一道题可以提交多次吗?会扣分吗?
点赞 回复 分享
发布于 2022-04-05 11:39
第二题排序完之后,将序号1 3 4 5分别减一,然后循环排序减一,直到第一个数为0,输出减的次数加第二个数,过40%(超时)
点赞 回复 分享
发布于 2022-03-26 14:21
楼主有面试消息了吗
点赞 回复 分享
发布于 2022-03-25 23:09
第二道编程题已经算hard了
点赞 回复 分享
发布于 2022-03-25 16:11
第三题这样写过了多少
点赞 回复 分享
发布于 2022-03-25 15:10
有选择答案不
点赞 回复 分享
发布于 2022-03-25 13:19
请问第二部分都是多选么 我看他写的不定项选择😭
点赞 回复 分享
发布于 2022-03-25 13:11
第二题的话这样可以吗 我赛后想到的
点赞 回复 分享
发布于 2022-03-25 12:05
第二题你可以试试2 4 4 5 6,你的程序 是不对的,我暴力过了40
点赞 回复 分享
发布于 2022-03-25 12:02

相关推荐

2025-12-12 19:01
南京航空航天大学 C++
秋招没咋投,准备&nbsp;wxg&nbsp;转正之后摆烂了。结果不堪字节&nbsp;HR&nbsp;的骚扰还是面了一下字节。之前想去字节的时候怎么面都挂。现在想着随便面一下结果三面技术面都意外顺利还有加面。十月中旬字节发了意向,wxg&nbsp;转正结果无响应。十月底字节拉了保温群,wxg&nbsp;口头通过,系统显示考核中。十一月初和字节&nbsp;ld&nbsp;交流之后得知&nbsp;base&nbsp;居然能选海外,甚至能小&nbsp;wlb&nbsp;一下,wxg&nbsp;无响应无人联系。十一月中旬把字节&nbsp;base&nbsp;转到了海外,wxg&nbsp;流程灰了,一问超时忘处理了,过两天又变考核中了。十一月下旬字节换了海外&nbsp;HR&nbsp;对接,问了期望薪资,wxg&nbsp;考核终于显示通过,无&nbsp;HR&nbsp;保温,无其他保温。十一月底给字节报了个天价,想吓吓他们,同时告诉微信字节要开了,微信无响应。同样十一月底字节&nbsp;HR&nbsp;告诉我确实给不到那么高,但是能拿期权补上,问能不能接受。微信无响应。同样十一月底字节&nbsp;HR&nbsp;告知了具体方案,符合预期。&nbsp;微信无响应。十二月上旬催&nbsp;wxg&nbsp;不开我就盲拒了,wxg&nbsp;HR&nbsp;火急火燎的打电话问情况,问期望。我给了一个不算夸张的总包数字,因为今年市场在涨,过了三天还不联系我,我再催,约时间下午打电话,非得在我给出的数字上压下去几万,微信又不差这点,为什么不能满足我,让我没有拒绝的理由呢?一番纠结抗争,求稳还是追求挑战,最终选择接受迎接新的挑战,因为堂吉诃德永远不会停下脚步!回想起来,在&nbsp;wxg&nbsp;谈薪的阶段,我认为并没有给予我一定的重视,即使&nbsp;HR&nbsp;表示我在实习期间的表现和之前的面评都很靠前。也没有感觉到想要争取我,虽然我表示拒了&nbsp;offer&nbsp;之后要给我加面委定&nbsp;t6&nbsp;再涨,但我三个月没面试让我面面委那就是白给,还是算了。有缘再见了我亲爱的&nbsp;wxg,再见了曾经的梦中情厂,再见亲爱的&nbsp;mt,再见亲爱的朋友们。也再见,北京的一切。我想润了。秋招结束,卸载牛客,下一个三年,下一个五年,下一个十年后再来看看。
面试中的大熊猫爱吃薯...:我嫉妒得狗眼通红
点赞 评论 收藏
分享
2025-12-30 16:42
同济大学 C++
仁狂躁使者:哎呀,不用担心,我当时配环境配了两天,项目捋不清就问问导师能不能用ai,慢慢就清了,会好起来的
点赞 评论 收藏
分享
评论
6
72
分享

创作者周榜

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