class Solution {
public:
int majorityElement(vector<int>& nums) {
int cur = INT_MIN, len = 0;
for (auto n : nums) {
if (len == 0)
cur = n;
len += n == cur ? 1 : -1;
}
return cur;
}
};
devide and conquer
class Solution {
public:
int majority(vector<int> & nums, int lo, int hi) {
if (hi - lo == 1) return nums[lo];
int mid = lo + ((hi - lo) >> 1);
int left = majority(nums, lo, mid);
int right = majority(nums, mid, hi);
if (left == right) return left;
else {
auto begin = nums.begin();
int lcnt = count(begin + lo, begin + hi, left);
int rcnt = count(begin + lo, begin + hi, right);
return lcnt > rcnt ? left : right;
}
}
int majorityElement(vector<int>& nums) {
return majority(nums, 0, nums.size());
}
};