public int majorityElement(int[] nums) {
//分治算法:如果左边和右边出现的数字一样,那么就是这个数组
//如果左边和右边出现的数字不同,那么需要统计各自出现的次数
return core(0,nums.length-1,nums);
}
public int core(int left,int right,int[] nums){
if(left==right) return nums[left];
int mid=left+(right-left)/2;
int leftNum=core(left,mid,nums);
int rigthNum=core(mid+1,right,nums);
if(leftNum==rigthNum) return leftNum;
int leftCount=count(nums,left,mid,leftNum);
int rightCount=count(nums,mid+1,right,rigthNum);
return leftCount>rightCount?leftNum:rigthNum;
}
public int count(int[] nums,int left,int right ,int target){
int count=0;
for(int i=left;i<=right;i++){
if(nums[i]==target){
count++;
}
}
return count;
}
LEETCODE39 数组中出现次数超过一半的数字 分治算法
最新推荐文章于 2022-04-10 15:58:27 发布