版权声明:本文自由转载,转载请注明出处。 https://blog.csdn.net/qq_38071429/article/details/83931440
三种思路可选。
public class Solution {
/*
渣渣暴力求解法:时间复杂度为n!,从0位遍历数组,与当前位置的下一位数字判断是否相等,相等则
count+1,将出现次数用countTemp存储,每次循环比较一下有没有出现次数更多的数字,循环结束时
num已经存储了数组中出现次数最多的那个数字,而count存储的是num出现的次数。
*/
public int MoreThanHalfNum_Solution(int [] array) {
int num = 0,countTemp = 1,temp = 0,length = array.length;
if(length==1) return array[0]; //若数组只有一个数,满足题目要求,将该数返回即可
for(int i=0;i<length;i++) {
int count = 1;
temp = array[i];
for(int j=i+1;j<length;j++) {
if(array[j]==temp) {
count++;
}
}
if(countTemp < count) {
countTemp = count;
num = temp;
}
}
//按题目要求num出现的次数必须大于数组的一半 否则返回0
if((length%2==0&&countTemp<=length/2)||(length%2!=0&&countTemp<=length/2))
return 0;
return num;
}
}
public class Solution {
/*
初始化一个变量num存储数组第一个数,遍历数组,依次判断数组中的值有否与其相等,是则count++,
否则count--,当count减到为零时,重新赋值为一,并将当前数值赋给num,此法可以找出数组中出现
次数最多的数字找出。
*/
public int MoreThanHalfNum_Solution(int [] array) {
int num = array[0],count = 1;
for(int i=1;i<array.length;i++) {
if(count==0) {
num = array[i];
count = 1;
}
else if(num==array[i]) count++;
else count--;
}
//count能帮助筛选出出现次数最多的数字 但此时他存储的并不是出现次数最多数字的次数
count = 0;
for(int i=0;i<array.length;i++) {
if(num==array[i]) count++;
}
//如果数组中出现次数最多的数字出现次数都没有超过数组长度一半,根据题意该数字不存在返回0
if(count>array.length/2) return num;
else return 0;
}
}
import java.util.Arrays;
public class Solution {
/*
运用Java内置包的排序算法将数组排好序,若满足题目条件,则数组中间的数字,应该是
出现次数最多的数字(出现次数超过一半),再通过一个循环判断该数是否满足题意即可。
*/
public int MoreThanHalfNum_Solution(int [] array) {
Arrays.sort(array);
int num = array[array.length/2],count = 0;
for(int i=0;i<array.length;i++) {
if(num==array[i]) count++;
}
if(count>array.length/2) return num;
else return 0;
}
}