您的位置:首页 > 其它

?不是很理解的分治法Majority Element

2016-12-23 20:40 169 查看
class Solution {
public:
int majorityElement(vector<int>& nums) {
return majority(nums, 0, nums.size() - 1);
}
private:
int majority(vector<int>& nums, int left, int right) {
if (left == right) return nums[left];
int mid = left + ((right - left) >> 1);
int lm = majority(nums, left, mid);
int rm = majority(nums, mid + 1, right);
if (lm == rm) return lm;
return count(nums.begin() + left, nums.begin() + right + 1, lm) > count(nums.begin() + left, nums.begin() + right + 1, rm) ? lm : rm;
}
};
代码是这样的,也大致理解分治法,就是把一个大区域问题分成小区域问题,分而治之,然后递归就比较常用。然而不是很懂这里的,这里就是把这个数列对折对折对折,然后递归,往下走的过程就是走到每一个元素,往上走就是已知左右两侧序列的majority,然后求现在序列的majority。代码流程看懂了,但是不理解为啥这么搞.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: