funcgcd(a int, b int)int { if b == 0 { return a } return gcd(b, a%b) }
funcsub(nums []int, maxC int, length int)bool { var leng = len(nums) var arr = slices.Clone(nums) var g = 1 //l和r用于表示以r结尾的最长稳定子数组 //l,r为左开右闭区间,根据个人喜好决定 for l, r := -1, 0; r < leng && maxC >= 0; r++ { g = gcd(max(arr[r], g), min(arr[r], g)) //当发现(l,r]区间不再稳定则重新计算l坐标 if g < 2 { l = r g = arr[r] for ; l >= 0; l-- { t := gcd(max(arr[l], g), min(arr[l], g)) //当发现[l, r]上存在至少两个数互质时立即跳出循环 //确保(l,r]为稳定子数组 if t >= 2 { g = t } else { break } } } if r-l > length { arr[r] = 1 g = 1 l = r maxC-- } } return maxC >= 0 }