编程之美 (寻找发帖水王)

寻找发帖水王

每次删除两个不同的ID,在剩下的ID中水王ID出现的次数仍然超过总数的一半 如下代码,时间复杂度为O(N)(摒弃了排序),这相当于一次对战,出现次数多得即为赢家,为发帖水王

public class King {



/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int Id[]={1,4,3,4,5,4,2,4,2,4,4,4};
int times=0;
int king = 0;
for(int i=0;i<Id.length;i++)
{
if(times==0)
{
king=Id[i];
times=1;
}else
{
if(king==Id[i])
{
times++;
}
else
{
times--;
}
}
}
         System.out.println(king+"   出现次数"+(Id.length/2+times-1));
}

}

水贴王的变形

public static void main(String[] args) {
/*
* 没有超级水王了
* 有三个发帖很多的ID,他们发帖的次数超过总数目ND的1/4.从发帖Id中快速找出他们的ID
*/
int Id[]={1,3,3,3,5,4,5,4,5,4};
int times1=0;
int times2=0;
int times3=0;
int id1=0;
int id2=0;
int id3=0;
for(int i=0;i<Id.length;i++)
{
if(id1==Id[i])
{
times1++;
}else if(id2==Id[i])
{
times2++;
}else if(id3==Id[i])
{
times3++;
}
else if(times1==0)
{
times1=1;
id1=Id[i];
}
else if(times2==0)
{
times2=1;
id2=Id[i];
}
else if(times3==0)
{
times3=1;
id3=Id[i];
}
else
{
times1--;
times2--;
times3--;
}
}
System.out.println(id1 +" dddd"+id2 +" dddd"+id3);
//O(7N)
}

//应该有更好的解法

希望读者给出,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值