目标是让数组中存在两个位置,它们的值有大于 1 的公因数,且每次只能把某个位置加 1,求最少次数。
关键观察:任意两个数都可以分别加到偶数,从而共享质因子 2,因此答案不会超过 2。于是只需依次判断答案能否为 0 或 1。
烘焙间里摆着一排装袋模具,从左到右第 i 个模具里已有 pieces[i] 块饼干(i 从 0 开始)。值班师傅希望能挑出两个不同模具,使它们的饼干数存在大于 1 的公因数,这样就能按同一份数规格去分装。
允许的操作是:选中某一个模具,往里面再放 1 块饼干。每次操作代价记为 1,可以操作任意多次(也可以一次都不做)。
请计算:最少需要多少次操作,才能让数组里存在两个下标 i=j,满足 gcd(pieces[i],pieces[j])>1。
请实现:
minShareOps(pieces: int[]) -> int
一行整型数组,形如 [1,1]。
约束:
一行整数:最少操作次数。
输入:
[1, 1]
输出:
2
说明:
输入:
[4, 8]
输出:
0
说明:已有 gcd(4,8)=4>1,无需操作。
输入:
[3, 11]
输出:
1
说明:把 3 加一次变成 4 后,gcd(4,11)=1 仍不行;但把 11 加一次变成 12,gcd(3,12)=3>1,代价为 1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册