Medium
Minimum Number of Operations to Make All Array Elements Equal to 1 — C++
Full explanation · Time O(n^2) · Space O(1)
// Time: O(n^2)
// Space: O(1)
// math, number theory, constructive algorithms
class Solution {
public:
int minOperations(vector<int>& nums) {
static const int INF = numeric_limits<int>::max();
const int cnt = count(cbegin(nums), cend(nums), 1);
if (cnt) {
return size(nums) - cnt;
}
int result = INF;
for (int i = 0; i < size(nums); ++i) {
int g = nums[i];
for (int j = i + 1; j < size(nums); ++j) {
g = gcd(g, nums[j]);
if (g == 1) {
result = min(result, j - i);
break;
}
}
}
return result != INF ? result + (size(nums) - 1) : -1;
}
};