数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。因为2在数组中出现的次数超过5次,所以输出2.


public static int moreThanHaft(int []numbers) {   
	        int count=1;
	        int key=numbers[0];
	        
	        for(int i=1;i<numbers.length;i++)
	        {
	            if(numbers[i]==key)
	            {
	                count++;
	            }
	            else
	            {
	                count--;
	            }
	            
	            if(count==0)
	            {
	                key=numbers[i];
	                count=1;
	            }
	        }
	 
	        int c1=0;
	        for(int i=0;i<numbers.length;i++)
	        {
	            if(numbers[i]==key)
	            {
	                c1++;
	            }
	        }
	        if(c1>(numbers.length/2))
	            return key;
	        else
	            return 0;
	    }
	public static void main(String[] args) {
		int []arr = {2,3,2,2,1,2,2,5,4};
		System.out.println(moreThanHaft(arr));
	}

高效的一种解法

public class overhalfprint {
	
    public static int moreThanHaft(int[] num){               
        for(int i=0;i<num.length;i++){
        int	times=0;
        	for(int j=0;j<num.length;j++) {
        		if(num[i]==num[j])
        			times++;
        	}
        	if(times>(num.length/2)) {
        		return num[i];
        		}
        }
		return 0;
     
    }
	   public static void main(String[] args) {
		int []arr= {1,3,2,2,6,2,2,7,2};
		if(moreThanHaft(arr)==0) 
			System.out.println("不存在这样的数");    
		else 
			System.out.println(moreThanHaft(arr)); 
	   }
}

傻瓜解法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值