public int majorityElement(int[] nums) {
return getMajority(nums,0,nums.length-1)
}
private int getMajority(int[] nums,int left,int right){
//递归到nums序列只有一个元素时返回
if(left == right){
return nums[left]
}
//对半递归,分而冶之,并返回给leftMajor,rightMajor
int mid = (left + right)/2
int leftMajor = getMajority(nums,left,mid)
int rightMajor = getMajority(nums,mid+1,right)
if(leftMajor == rightMajor){
return leftMajor
}
// 有疑惑的是如果最后一次N返回的leftMajor,rightMajor返回的数跟n-1次不一样,那for循环判断逻辑是不是有问题
int leftCount = 0
int rightCount = 0
for(int i = left
if(nums[i] == leftMajor){
leftCount++
}else if(nums[i] == rightMajor){
rightCount++
}
}
return leftCount > rightCount ? leftMajor : rightMajor
}
}