算法总结

1、一个数组中一个数的数量超过数组长度的一半。

    过半数问题,思路:循环数组,得到一个次数就+1,循环看下一个,若果相同就再+1不同就-1.如果次数为0,就把新循环的数作为下次比较的对象,初始给他次数为1,下次比较如果相同+1,不同-1.

设置两个变量,一个是放数组当前>0次的数值k,一个放出现的次数j,出现一次+1,不同-1.判断是否=0,=0表示k需要新的数值比较。当最后j>0时,k就是出现超过一半的数。

public int getValue(int[] poker, int n) {
	    int k = poker[0], j= 1;
	    for(int i = 1; i<n; i++){
	        if(j==0)
	            k=poker[i];
		    if(poker[i]==k)
		         	j++;
		    else j--;
	    }
	    if(j>1)
	    	return k;
	    else
	    	return 0;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值