阿里工程研发实习笔试2023-04-03

还记得20年做阿里的笔试题,一个是普通 BFS,一个是普通 set,两三百百刷题量就可以秒杀。

但现在,不仅难度提升,题量还变大,而且还增加了考点巨细无比的选择题。

时过境迁,校招笔试题已经卷到如此地步了,不得不让人唏嘘....

T1 黄牌警告,红牌下场

一个球队有n个球员,已知他们一共接受了x张黄牌,y张红牌。

当一个球员满足以下条件之一时会立刻下场:

1. 接受了2张黄牌

2. 接受了1张红牌

请问已知以上信息的前提下,当前能上场的球员最多有多少人?最少有多少人?共有q次查询。

q <= 1e4, 1 <= n <= 1e9, 0 <= x, y <= 1e9

输入:

4

2 2 1

3 2 0

3 0 2

1000000000 0 0

输出:

1 0

3 2

1 1

1000000000 1000000000


最少很好算,n - int(x / 2) - y 即可。

最大的情况是:将黄牌尽可能的发个每一个人,然后剩余的 x - n 张发给没有发红牌的人(n - y 个里面选择 x - n 个)。

T2 矩阵染色问题

给定一个n行m列的矩阵,其中一些方格被染成了红色,其余方格为初始的白色。

现在定义 f(i, j) 为:若将第i行、第j列的方格染白,当前矩阵的红色连通块数量。

请你求出每个 f(i,j) 的值。

1 <= n,m <= 40


暴力枚举每一个方格,修改后求红色连通块个数(DFS)。求解连通块个数可以参考:https://leetcode.cn/problems/number-of-islands/description/

复杂度 O(n^2m^2)。

T3 权值不超过 k 的连续子数组数量

我们定义一个数组的权值为:所有元素乘积的因子数量。例如,[2,6]的权值为6,因为2*6=12,12有6个因子:11,2,3,4,6,12}

现在给定一个数组,试求该数组有多少连续子数组的权值不小于K?

1 <= n, a_i <= 2e5, 1 <= k <= 1e9


所有元素的乘积的因子数量与质因数分解后的指数有关。

一个数 x 可以被分解为若干个质因数的乘积:

x = p_1^{c_1} \times p_2^{c_2} \times \cdots \times p_k^{c_k}

它的因子个数是:

(c_1+1)\times (c_2 + 1) \times \cdots \times (c_k+1)

所以,我们通过滑动窗口维护其中所有数字乘积的质因数的指数(用一个数组或哈希表),同时维护因子数量(cnt)。

对于每个右端点 i,维护最小的左端点 j,使得 [i,j] 乘积因子数目小于 k。那么对于 i 来说,共有 j 种方案满足要求,例如 [0, i], [1, i], ... [j-1, i]。

时间复杂度为 O(n\sqrt n),主要是质因数分解的复杂度。

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    unordered_map<int, int> mp;
    ll cnt = 1, res = 0;
    auto addv = [&](int x, int t) {
        for (int i = 2; i * i <= x; i++) {
            while (x % i == 0) {
                cnt /= (mp[i] + 1);
                mp[i] += t;
                cnt *= (mp[i] + 1);
                x /= i;
            }
        }
        if (x > 1) {
            cnt /= (mp[x] + 1);
            mp[x] += t;
            cnt *= (mp[x] + 1);
        }
    };
    for (int i = 0, j = 0; i < n; i++) {
        cin >> a[i];
        addv(a[i], 1);
        while (j <= i && cnt >= k) {
            addv(a[j], -1);
            j++;
        }
        res += j;
    }
    cout << res << "\n";
}
#笔试##软件开发2023笔面经##阿里#
今夕的求职日记 文章被收录于专栏

记录2023年-2024年的笔试、面试问题~

全部评论
想问下第一问的代码时类似这样的吗 public static void query(int n, int x, int y) { int min, max = 0; min = n - y - x/2; int yellowRemain = Math.max(0, x - n); max = yellowRemain + n - y; System.out.println(max + " " + min); }
点赞 回复 分享
发布于 2023-08-05 23:56 美国
第三题厉害了,我还以为连续子数组是必须要从0开始的子数组呢
点赞 回复 分享
发布于 2023-04-05 15:10 湖南
捞简历,杭州-阿里巴巴-淘菜菜技术部,不泡池子,欢迎私信
点赞 回复 分享
发布于 2023-04-04 18:00 浙江
打个广告,阿里巴巴数字供应链2024届实习生正在急招,欢迎来撩
点赞 回复 分享
发布于 2023-04-04 16:29 浙江
第三题思路真妙啊,只想到了暴力解,还能这样用滑动窗口
点赞 回复 分享
发布于 2023-04-04 15:51 四川
up主太强了,最后一题看到的时候,完全没思路
点赞 回复 分享
发布于 2023-04-04 09:40 广东
太强了
点赞 回复 分享
发布于 2023-04-04 03:17 江苏
优秀
点赞 回复 分享
发布于 2023-04-04 00:04 辽宁

相关推荐

04-15 17:41
已编辑
南京林业大学 后端工程师
发面经攒人品两周前一面的,一直没有消息,这周突然二面了一面忘记录音了,只记下来一点三道手撕-&nbsp;第一题压根没见过,提供了两种指令,要求用这两种指令实现判断字符串是否符合某种性质(不会)-&nbsp;leetcode240搜索二维矩阵&nbsp;II,hot100题目(还有点记忆)-&nbsp;给定一堆用户的在线时间记录(格式为[登陆时间,退出时间]),求姐同时在线用户最多的时间段八股环节,他让我选则计网或者系统,我选了计网-&nbsp;http从1开始一直3,每次改进了什么,解决了什么问题-&nbsp;http1.1的头堵塞问题是什么意思-&nbsp;http2为什么会有头部堵塞-&nbsp;http3怎么解决头部堵塞的-&nbsp;为什么用udp的QUIC协议能将解决头部堵塞-&nbsp;讲一下https握手-&nbsp;每次https都要四次握手,代价很大怎么优化?用长连接-&nbsp;长连接的https万一密钥泄露了怎么办?设定一定的时间,定时重握手二面1.&nbsp;哪里人,在哪里上学2.&nbsp;自我介绍3.&nbsp;讲一下mcp4.&nbsp;讲一下skill5.&nbsp;你有一个智能agent项目,讲一下什么叫做智能6.&nbsp;我想设计一个智能告警系统,有四个项目需要监控,每个项目每天都有致命告警。但是这些致命告警有一些是错报,因为这些告警是别的同学配置的,我没有办法去掉。有两点:一是该系统需要能够同时监控多个项目,二是告警出来后需要去查代码是什么意思或者调用一些工具进行自动化处理。你认为这个系统应该怎么设计?7.&nbsp;这个系统的rag里面存什么?tool要封装哪些工具?怎么agent按照某个流程执行检查?8.&nbsp;你简历上的这个项目与刚刚我想要的那种系统很像,你能讲一下两者之间的差异吗9.&nbsp;你刚刚说到了兜底逻辑需要做一些,能来讲一下大概要做哪些兜底逻辑吗?10.&nbsp;你平时用什么ai工具,怎么用?11.&nbsp;用过openclaw吗?12.&nbsp;讲一下实习项目13.&nbsp;实习的时候主要是做前端还是后端?14.&nbsp;怎么实现一个分布式锁,设置超时时间?15.&nbsp;假设有abc三个在抢锁,简单介绍一下情况。然后a挂了会怎么样,你能从代码级别描述一下吗?16.&nbsp;你知道MongoDB吗?17.&nbsp;一分钟快速介绍一下事务的ACID18.&nbsp;一致性怎么保证?代码中怎么实现?19.&nbsp;你怎么理解消息队列中的消息持久性20.&nbsp;讲一下消息队列怎么保证持久性?21.&nbsp;万一消息队列磁盘坏了怎么办?22.&nbsp;写操作是只写那个主消息队列吗?23.&nbsp;了解https算法吗?24.&nbsp;rsa个ec算法有什么区别?不知道25.&nbsp;你用过哪些对称加密算法?只知道凯撒密码26.&nbsp;10个业务,一天1亿个计算任务,10万台机器资源,构建一个分布式计算平台。任务大多是cpu型任务,有长又短。你会怎么设计这个平台?27.&nbsp;你的路由层用多少机器?28.&nbsp;假设用了三台机器来管理,然后其中要有一个leader,怎么选出一个leader?29.&nbsp;基于redis实现选举,怎么实现?一开始我说模仿哨兵模式,用一个哨兵节点负责选举。他要求我不用哨兵,就用三台机器和一台redis实现选举30.&nbsp;现在解决了主master的问题,接着怎么调度?讲一下怎么调度的设计思路31.&nbsp;假设某一瞬间来了很多请求,你怎么保证所有机器不会被打爆?32.&nbsp;现在有很多新的技术,你怎么看待新技术,是出来一个就学一个吗?还是怎样一个态度?33.&nbsp;你怎么学习一个新技术,讲一下思路和方法34.&nbsp;平时会有多人协作的工作吗?35.&nbsp;研究生的研究方向是什么?平时干什么?36.&nbsp;了解编解码算法吗,比如h264和h265,我们这边可能涉及到多媒体数据格式的转化,你了解多少?37.&nbsp;h264中的视频帧分成哪几种?好像是分三种,具体不知道38.&nbsp;h264和265的区别?不知道反问:1.&nbsp;部门做的是存储、多媒体相关的,我没有这方面背景,对实习生要求是啥?进来后再学,要有自学能力、自驱力2.&nbsp;转正要求,转正率是多少?50%以上。(存疑,tx转正率有这么高吗)3.&nbsp;具体业务场景:提供存储服务,用户上传存到这里,访问的时候再下发。面试官追问:1.&nbsp;你有没有其他offer?
点赞 评论 收藏
分享
评论
14
50
分享

创作者周榜

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