算法1
虽然我知道这么做不对,但是是真的爽
排序取中间
Java 代码
class Solution {
public int moreThanHalfNum_Solution(int[] nums) {
if(nums==null||nums.length==0)
return 0;
Arrays.sort(nums);
return nums[nums.length/2];
}
}
算法2
$O(n)$
因为超过一半的数字,所以一定比其他所有的数字都多
则设置一个计数器,有相同的加一,不相同减一,当减到1的时候,换成当前的数字,遍历整个数组,最后就得到了超过一半的数字
Java 代码
class Solution {
public int moreThanHalfNum_Solution(int[] nums) {
if(nums==null||nums.length==0)
return 0;
int halfNum = nums[0];
int sum = 1;
for(int i = 1;i<nums.length;i++){
if(halfNum==nums[i])
sum++;
else{
if(sum==1){
halfNum=nums[i];
}else{
sum--;
}
}
}
return halfNum;
}
}
hhhhhhhhhhhhhhhhhh