拼多多2021秋招笔试题

2020.09.01 19:00 开发岗编程笔试
拼多多的笔试题还是略难一点的(对比深信服),但比不上华为300分的题难度,华为的题分值是有梯度的(100、200、300),只需100分即可通过

 

第一题

将n*n矩阵分8个区域打印图形,从右上角逆时针标记对应区域的数字(1~8)
图形

示例:

n=4
0 2 1 0
3 0 0 8
4 0 0 7
0 5 6 0
n=5:
0 2 0 1 0
3 0 0 0 8
0 0 0 0 0
4 0 0 0 7
0 5 0 6 0

思路:
区分这几组大小关系即可填入对应位置

  • i与n/2
  • j与n/2
  • i与j
  • i+j与n

 

第二题

n*m 01矩阵可以移动任意一个1,求移动后1的连通块最大大小

思路:

  • 先dfs/bfs求每个连通块的大小
  • 枚举所有节点0,判断周围4个方向相邻1个连通块个数是否为全部连通块的个数
    • 若是 答案为:周围连通块大小之和
    • 若否 答案为:周围连通块大小之和 + 1 (可以从其他连通块移动1填到此节点0)

 

第三题

01背包问题,n<200,V<5000。v[i]、c[i]可为负数,表示装入后总容量可增大/总价值会减少

  • 滚动数组
    通过60%
  • 对v[i]排序,将v[i]<=0,c[i]>=0先放入背包,更改背包容量
    通过64%
  • 待解决

 

第四题

求1~N(N<1000000000) 内有多少个整数可以整除集合\(Y=\{Y_1,Y_2...Y_m\}(m\le 20)\)中某个元素

思路:容斥原理
注意到 1~N 内整除 x 的整数个数为 N/x,根据容斥原理,答案为

\[\sum {N \over Y_i} - \sum_{i\ne j} {N \over Y_i*Y_j} + \sum_{i\ne j,i\ne k,j\ne k} {N \over Y_i*Y_j*Y_k}- ... \]

注意:Y集合首先要调整为全部元素互质的集合,即不存在 \(Y_i = k*Y_j\)

posted @ 2020-09-01 22:07  izcat  阅读(844)  评论(0编辑  收藏  举报