File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments