Skip to content

Latest commit

 

History

History

2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1

2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1

我们发现,只有出现两个元素互质的时候,才能搞出一个1。只要搞出一个1,那么它与相邻元素结合,之后每一个回合就都能再搞出一个1,而且是最高效的变换。

所以,如果所有元素的最大公约数不是1,那么永远无法约出1来,那么就无解。

其次,如果已经有元素有1,那么如上所说,每个会和,都可以把一个非1元素变换成1. 所以答案就是n - m,其中m是原数组里1的个数。

最后,我们思考如何尽快地搞出1来。这就需要将一段相邻的元素取gcd,公约数越来越小,直至变成1. 于是本题就转化为,求最短的区间,区间元素的gcd是1. 考虑到整个元素的个数不超过50,那么暴力遍历所有subarray即可。找到了这样的最短区间len,说明经过len-1次变化就可以搞出第一个1,那么接下来经过n-1变化就可以把所有的非1元素搞定。