1007: Minimum-Domino-Rotations-For-Equal-Row
Medium
table of contents
This question is weird. I dislike my solution, but I will post about it anyways because I alksjdaslkjdlaskjd.
Anyways, basically my algo takes the first domino and creates a
hashmap using tops[0] and
bottoms[0] as keys, where in the [key, value]
pair, the value is a pair<int, int>
structure with value.first storing the tops
count and value.second storing the bottoms
count.
It then just iterates through all the dominoes and checks if either keys are present on either side of the domino.
Afterwards,
code
class Solution {
public:
int minDominoRotations(vector<int>& tops, vector<int>& bottoms) {
unordered_map<int, pair<int, int>> mp;
++mp[tops[0]].first;
++mp[bottoms[0]].second;
for (int i = 1; i < tops.size(); ++i) {
if (mp.size() == 0) break;
vector<int> erase;
for (auto& [key, value] : mp) {
if (key == tops[i] || key == bottoms[i]) {
if (key == tops[i]) {
++value.first;
}
if (key == bottoms[i]) {
++value.second;
}
} else {
erase.push_back(key);
}
}
for (int& n : erase) {
mp.erase(n);
}
}
if (mp.size() == 0) {
return -1;
}
int ans = INT32_MAX;
for (auto& [key, value] : mp) {
ans = min(ans, (int)min(tops.size()-value.first, tops.size()-value.second));
}
return ans;
}
};