Skip to content

Commit 30563ea

Browse files
authored
Create minimum-operations-to-make-the-array-alternating.cpp
1 parent 2170b9b commit 30563ea

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Time: O(n)
2+
// Space: O(n)
3+
4+
// freq table
5+
class Solution {
6+
public:
7+
int minimumOperations(vector<int>& nums) {
8+
const auto& find_top1_and_top2 = [](const auto& cnt) {
9+
int top1 = -1, top2 = -1;
10+
for (const auto& [k, v] : cnt) {
11+
if (top1 == -1 || v >= cnt.at(top1)) {
12+
top2 = top1;
13+
top1 = k;
14+
} else if (top2 == -1 || v > cnt.at(top2)) {
15+
top2 = k;
16+
}
17+
}
18+
return make_pair(top1, top2);
19+
};
20+
21+
unordered_map<int, int> even;
22+
for (int i = 0; i < size(nums); i += 2) {
23+
++even[nums[i]];
24+
}
25+
unordered_map<int, int> odd;
26+
for (int i = 1; i < size(nums); i += 2) {
27+
++odd[nums[i]];
28+
}
29+
const auto& [even_top1, even_top2] = find_top1_and_top2(even);
30+
const auto& [odd_top1, odd_top2] = find_top1_and_top2(odd);
31+
if (even_top1 != odd_top1) {
32+
return size(nums) - even[even_top1] - (odd_top1 != -1 ? odd[odd_top1] : 0);
33+
}
34+
return min(size(nums) - even[even_top1] - (odd_top2 != -1 ? odd[odd_top2] : 0),
35+
size(nums) - odd[odd_top1] - (even_top2 != -1 ? even[even_top2] : 0));
36+
}
37+
};

0 commit comments

Comments
 (0)