2020-04-17阿里巴巴实习生笔试题

2020-04-17  本文已影响0人  杰伟_4fdf

2020.4.17

阿里巴巴实习生笔试题

1、输入一个数 n,要输出 n个数,这n个数是 1-n 的排列,

要求满足,

对于排列中 i<k<j,有 ai + aj != 2*ak ;

我的思路是:

对一个存有1-n按顺序排好的数组,

每次从首尾拿,

比如n = 4,

数组-》1 2 3 4

从首部拿 1,

数组-》2 3 4

从尾部拿 4

数组-》2 3

从首部拿 2

数组-》3

从尾部拿 3

输出 1 4 2 3。

样例通过0.0%。。。

不解???

之后在小伙伴的悉心分析下,原来 i<k<j 中,i,k,j 是不连续的!!!!

2、在一个有 n 个节点的环形图中,有 n 条无向边,

前 n-1 条边的权值为 第 i 个节点到 第 i+1 个节点的距离,

第 n 条边的权值为第 n 个节点到第 1 个节点的距离,

现有 q 个人,每个人都有各自的起点和终点。

很明显,从起点到终点的路径有两条,默认会走距离小的那条。

n 条边每条边有相同的概率会被切断,

问:每个人从起点到站点的距离变大的概率,对每个人输出对应的概率,用最简分数表示。

输入:

第一行:2个数 n 和 q;

第二行:n个数,代表 n 条边的权值;

其余 q 行,每行 2 个数,为 q 个人对应的起点和终点;

输出:

q 行,每行用最简分数表生,如 1/3。

想着用数组 d[i] 记录第 1 个节点按节点编号的顺序走到第 i 个节点的距离,

第 1 个节点到第 n 个节点的直接距离记为 w,

先得到未切割边时起点 u 到 终点 v 的两个距离为

路径1:按节点编号顺序到达终点的距离 L1 = d[v] - d[u],路径含 (u-v-1) 条边;

路径2:不按节点编号顺序到达终点的距离 L2 = d[n] - d[v] + d[u] + w,路径含 n-(u-v-1) 条边;

比较 L1 和 L2 的大小。

如果 L1 小,则当切断的边包含在路径1时,从起点到终点的距离会变大,那么最终的概率为 (v - u - 1)/n;

同理,如果 L2 小,则当切断的边在路径2中时,从起点到终点的距离会变大,最终的概率为 (n-u+v+1)/n;

以上是我的思路,并未得到证实。

记一次历时一小时的 0 题笔试体验。

上一篇下一篇

猜你喜欢

热点阅读