拼多多
20170902
一面:
输入一图,节点表示人,两节点相连表示两个人相互认识,现将图中点分成两组,使每组内的人相互不认识。如果不能分成这样的两组则返回false。
解:
层次遍历,第一层的节点放入组1,第二层的节点放入组2,第三层的节点放入组1……
用一数组记录每个节点的状态:未分组、组1、组2。通过状态值可以判断出一层中的节点是否相互认识。
二面:
给一N*N的二维数组,从左上角格子出发,到达右下角格子处,在每个格子中只能向下或向右移动,将从左上解到右下角经过的所有格子中的数字相乘,得到一乘积,求乘积的尾数中最少的零的个数。
解:
尾数产生0,需要有因子2和5,因此重点在于统计路径中2和5的个数。
从左上角开始,求每个格子中2的个数的最小值,最终得到到达右下角格子时的最少的2的个数n2;同理得到到达右下角格子时的最少的5的个数n5;取n2和n5中较小的值表示最终乘积尾数中零的最少个数。
在求解过程中要注意格子值为0的情况,当遇到0时如果n2大于零,则置n2为1并进行标记,在之后的计算中除非遇到可以使n2为0的情况,否则n2一直为1。n5的处理相同。
网友评论