剑指offer——(5)数组中出现次数超过一半的数字

版权声明:本文自由转载,转载请注明出处。 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;    	
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38071429/article/details/83931440