1.题目
2.解法1
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array == null || array.length == 0)return 0;
int preValue = array[0];//用来记录上一次的记录
int count = 1;
for(int i = 1; i < array.length; i++){
if(array[i] == preValue)
count++;
else{
count--;
if(count == 0){
preValue = array[i];
count = 1;
}
}
}
int num = 0;
for(int i=0; i < array.length; i++)
if(array[i] == preValue)
num++;
return (num > array.length/2)?preValue:0;
}
}
这里使用了抵消法,如果你的次数超过一半,那么肯定没有数字能完全抵消掉你,你再用for循环统计一下个数就行。
时间复杂度为O(n),空间复杂度为O(1)
解法2 (两层for循环)
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int i=0;
int find=0;
while(i<array.length)
{
int m=0;
for(int j=0;j<array.length;j++)
{
if(array[i]==array[j])
{
m++;
}
}
if(m>array.length/2)
{
find=array[i];
break;
}
i++;
}
return find;
}
}
时间复杂度为O(n^2),空间复杂度为O(1)