Leetcode 169, majority element, 难度 medium
因为这周正好在学分治,所以就做了这道分治的题目,就是不停地把数组分为两半,找到在这两半里面最多的元素,如果在这两半里面最多的元素相等,那这个就是majority,如果不等,那就遍历一边数组check是左边的元素多还是右边的元素多,返回多的元素,这里遍历用了容器里的count函数。
以下是代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
return major1(nums, 0, nums.size() - 1);
}
int major1(vector<int>& nums, int begin, int end) {
if(begin == end) return nums[begin];
if(begin < end) {
int mid = begin + (end - begin) / 2;
int left = major1(nums, begin, mid);
int right = major1(nums, mid + 1, end);
if(left == right) return left;
else{
return count(nums.begin() + begin, nums.begin() + end + 1, left) < count(nums.begin() + begin, nums.begin() + end + 1, right) ? right : left;
}
}
}
};