Medium
Number of Equal Numbers Blocks — C++
Full explanation · Time O(klogn) · Space O(1)
// Time: O(klogn), k = len(set(nums))
// Space: O(1)
// binary search
class Solution {
public:
int countBlocks(BigArray* nums) {
const auto& binary_search_right = [](auto left, auto right, const auto& check) {
while (left <= right) {
const auto mid = left + (right - left) / 2;
if (!check(mid)) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return right;
};
const int64_t n = nums->size();
int64_t result = 0;
for (int64_t left = 0; left != n; ++result) {
const int target = nums->at(left);
const auto& check = [&](auto x) {
return nums->at(x) == target;
};
left = binary_search_right(left, n - 1, check) + 1;
}
return result;
}
};