| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package B
- func minOperations(nums []int) int {
- n, gcdAll, cnt1 := len(nums), 0, 0
- for _, x := range nums {
- gcdAll = gcd(gcdAll, x)
- if x == 1 {
- cnt1++
- }
- }
- if gcdAll > 1 {
- return -1
- }
- if cnt1 > 0 {
- return n - cnt1
- }
- minSize := n
- for i := range nums {
- g := 0
- for j, x := range nums[i:] {
- g = gcd(g, x)
- if g == 1 {
- // 这里本来是 j+1,把 +1 提出来合并到 return 中
- minSize = min(minSize, j)
- break
- }
- }
- }
- return minSize + n - 1
- }
- func gcd(a, b int) int {
- for a != 0 {
- a, b = b%a, a
- }
- return b
- }
|