方法:分支法,将数据进行对半分割处理,类似归并排序

    1. class Solution {
    2. public:
    3. int majorityElement(vector<int>& nums) {
    4. return divide(nums,0,nums.size()-1);
    5. }
    6. int divide(vector<int>& nums,int left,int right){
    7. if(left==right){
    8. return nums[left];
    9. }
    10. int mid=(left+right)/2;
    11. int left_ma=divide(nums,left,mid);
    12. int right_ma=divide(nums,mid+1,right);
    13. if(choose(nums,left,right,left_ma)>((right-left+1)/2)){
    14. return left_ma;
    15. }
    16. else if(choose(nums,left,right,right_ma)>((right-left+1)/2)){
    17. return right_ma;
    18. }
    19. return -1;
    20. }
    21. int choose(vector<int>& nums,int left,int right,int target){
    22. int count=0;
    23. for(int i=left;i<=right;i++){
    24. if(nums[i]==target){
    25. count++;
    26. }
    27. }
    28. return count;
    29. }
    30. };