##### Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/2170.html

# 2170. Minimum Operations to Make the Array Alternating (Medium)

You are given a 0-indexed array nums consisting of n positive integers.

The array nums is called alternating if:

• nums[i - 2] == nums[i], where 2 <= i <= n - 1.
• nums[i - 1] != nums[i], where 1 <= i <= n - 1.

In one operation, you can choose an index i and change nums[i] into any positive integer.

Return the minimum number of operations required to make the array alternating.

Example 1:

Input: nums = [3,1,3,2,4,3]
Output: 3
Explanation:
One way to make the array alternating is by converting it to [3,1,3,1,3,1].
The number of operations required in this case is 3.
It can be proven that it is not possible to make the array alternating in less than 3 operations.


Example 2:

Input: nums = [1,2,2,2,2]
Output: 2
Explanation:
One way to make the array alternating is by converting it to [1,2,1,2,1].
The number of operations required in this case is 2.
Note that the array cannot be converted to [2,2,2,2,2] because in this case nums == nums which violates the conditions of an alternating array.


Constraints:

• 1 <= nums.length <= 105
• 1 <= nums[i] <= 105

Similar Questions:

## Solution 1. Counting

// OJ: https://leetcode.com/problems/minimum-operations-to-make-the-array-alternating/
// Time: O(N)
// Space: O(N)
class Solution {
public:
int minimumOperations(vector<int>& A) {
unordered_map<int, int> odd, even;
for (int i = 0; i < A.size(); ++i) {
if (i % 2) odd[A[i]]++;
else even[A[i]]++;
}
int oddCnt = {}, oddNum = {}, evenCnt = {}, evenNum = {};
for (auto &[n, cnt] : odd) {
if (cnt > oddCnt) oddCnt = oddCnt, oddNum = oddNum, oddCnt = cnt, oddNum = n;
else if (cnt > oddCnt) oddCnt = cnt, oddNum = n;
}
for (auto &[n, cnt] : even) {
if (cnt > evenCnt) evenCnt = evenCnt, evenNum = evenNum, evenCnt = cnt, evenNum = n;
else if (cnt > evenNum) evenCnt = cnt, evenNum = n;
}
if (oddNum != evenNum) return A.size() - oddCnt - evenCnt;
return min(A.size() - oddCnt - evenCnt, A.size() - evenCnt - oddCnt);
}
};