寻找发帖水王
每次删除两个不同的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)
}
//应该有更好的解法
希望读者给出,谢谢