#include <iostream>
#include <map>
#include <utility>
#include <algorithm>
#include <vector>
std::pair<int, int> max_adj(std::vector<int> arr) {
std::map<int, int> buckets;
for(int x = 0; x < arr.size(); x++) {
// Loop to eat up adjacent values
int in_a_row = 1;
for(int curr = x++;
x < arr.size() && arr[curr] == arr[x];
x++, in_a_row++) { }
x--; // The loop will increment x one past last dupe, so go back
// Only count every other adjacent value seen
buckets[arr[x]] += (in_a_row + 1) / 2;
}
// Find the most seen
std::map<int, int>::iterator mx = std::max_element
(
buckets.begin(), buckets.end(),
[] (const std::pair<int, int> &p1, const std::pair<int, int> &p2) {
return p1.second < p2.second;
}
);
if(mx != buckets.end()) {
return *mx;
}
return std::pair<int, int>(-1, -1);
}
int main() {
std::vector<int> v1 {9,2,3,4,0,4,5,6,0,8};
std::vector<int> v2 {4,4,4,4,4};
std::pair<int, int> p1 = max_adj(v1);
std::pair<int, int> p2 = max_adj(v2);
std::cout << "Max adj val in v1: " << p1.first
<< " counted " << p1.second << " times" << std::endl;
std::cout << "Max adj val in v2: " << p2.first
<< " counted " << p2.second << " times" << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnN0ZDo6cGFpcjxpbnQsIGludD4gbWF4X2FkaihzdGQ6OnZlY3RvcjxpbnQ+IGFycikgewoJc3RkOjptYXA8aW50LCBpbnQ+IGJ1Y2tldHM7CgkKCWZvcihpbnQgeCA9IDA7IHggPCBhcnIuc2l6ZSgpOyB4KyspIHsKCQkvLyBMb29wIHRvIGVhdCB1cCBhZGphY2VudCB2YWx1ZXMKCQlpbnQgaW5fYV9yb3cgPSAxOwoJCWZvcihpbnQgY3VyciA9IHgrKzsKCQkgICAgeCA8IGFyci5zaXplKCkgJiYgYXJyW2N1cnJdID09IGFyclt4XTsKCQkgICAgeCsrLCBpbl9hX3JvdysrKSB7IH0KCQl4LS07IC8vIFRoZSBsb29wIHdpbGwgaW5jcmVtZW50IHggb25lIHBhc3QgbGFzdCBkdXBlLCBzbyBnbyBiYWNrCgkJCgkJLy8gT25seSBjb3VudCBldmVyeSBvdGhlciBhZGphY2VudCB2YWx1ZSBzZWVuCgkgICAgYnVja2V0c1thcnJbeF1dICs9IChpbl9hX3JvdyArIDEpIC8gMjsKCSAgICAKCX0KCQoJLy8gRmluZCB0aGUgbW9zdCBzZWVuCglzdGQ6Om1hcDxpbnQsIGludD46Oml0ZXJhdG9yIG14ID0gc3RkOjptYXhfZWxlbWVudAoJKAoJICAgIGJ1Y2tldHMuYmVnaW4oKSwgYnVja2V0cy5lbmQoKSwKCSAgICBbXSAoY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiAmcDEsIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4gJnAyKSB7CgkgICAgICAgIHJldHVybiBwMS5zZWNvbmQgPCBwMi5zZWNvbmQ7CgkgICAgfQoJKTsKCQoJaWYobXggIT0gYnVja2V0cy5lbmQoKSkgewoJCXJldHVybiAqbXg7Cgl9CglyZXR1cm4gc3RkOjpwYWlyPGludCwgaW50PigtMSwgLTEpOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPGludD4gdjEgezksMiwzLDQsMCw0LDUsNiwwLDh9OwoJc3RkOjp2ZWN0b3I8aW50PiB2MiB7NCw0LDQsNCw0fTsKCQoJc3RkOjpwYWlyPGludCwgaW50PiBwMSA9IG1heF9hZGoodjEpOwoJc3RkOjpwYWlyPGludCwgaW50PiBwMiA9IG1heF9hZGoodjIpOwoJCglzdGQ6OmNvdXQgPDwgIk1heCBhZGogdmFsIGluIHYxOiAiIDw8IHAxLmZpcnN0IAoJICAgIDw8ICIgY291bnRlZCAiIDw8IHAxLnNlY29uZCA8PCAiIHRpbWVzIiA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIk1heCBhZGogdmFsIGluIHYyOiAiIDw8IHAyLmZpcnN0IAoJICAgIDw8ICIgY291bnRlZCAiIDw8IHAyLnNlY29uZCA8PCAiIHRpbWVzIiA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==