这道题本质上就是求所有数的公共Greatest Common Divisor(GCD),如果其等于1,则无解。如果其大于等于2,则有解。具体做法就是,首先统计各个种类牌的张数,然后选定一个种牌k,依次计算k与其他所有种类的GCD d,假设d初始化为0,当前牌的种类为i:
- 如果gcd(k, i ) == 1则说明我们无法找到大于等于2的公共GCD,return false
- 如果gcd(k, i ) > 1 && d == 0, d = gcd(k, i)
- 如果gcd(k, i ) > 1 && d != 0, d = gcd(gcd(k, i), d)
GCD(A + B)的时间复杂度是log(A + B),所以总的时间复杂度是N * log N,代码如下:
No comments:
Post a Comment