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\)