|
|
@@ -0,0 +1,38 @@
|
|
|
+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
|
|
|
+}
|