牛客刷题Java实现----数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

方法一:暴力遍历,时间复杂度为O(n2)

public class Solution {
	public static void main(String[] args) {
		int[] array = {1};
		Solution s = new Solution();
		System.out.println(s.MoreThanHalfNum_Solution(array));
	}
		public int MoreThanHalfNum_Solution(int [] array) {
			 if(array==null||array.length<=0){
			     return 0;
			 }        
			 if(array.length==1){
			     return array[0];
			 }
			 for(int i=0;iarray.length/2)
			 		return array[i];
			 }
		return 0;
    }
}

方法二:先对数组进行排序,排好序以后n/2处的就是要找的数。

public class Solution {
	public static void main(String[] args) {
		int[] array = {1,2,3,2,2,2,5,4,2};
		Solution s = new Solution();
		System.out.println(s.MoreThanHalfNum_Solution(array));
	
	}
	public int MoreThanHalfNum_Solution(int [] array) {
		if(array==null||array.length<=0){
		     return 0;
		 }        
		 if(array.length==1){
		     return array[0];
		 }
		 Arrays.sort(array);
		 int mid = array[array.length/2];
		 int j = 0;
		 for (int i=0; i array.length/2 ? mid : 0;
    }
}

 

你可能感兴趣的:(牛客刷题Java实现----数组中出现次数超过一半的数字)