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

来源:互联网 发布:千里马计划软件下载 编辑:程序博客网 时间:2024/05/16 05:12
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。代码流程看懂了,但是不理解为啥这么搞.....
0 0
原创粉丝点击