《编程之美》: 寻找发帖水王的扩展问题 2.3

这个问题的解决办法类似于1个发贴水王的问题,可以同时删除四个不相同的ID,直到找不到四个不相同的为止,余下的三个即为三个水王,通守维护三个结构体完成

struct Person
{
    IDType ID;
    int count;
}

通过遍历一遍即可得到最终结果,消除四个不同的ID实现为,比较每个一个ID,和当前的三个结构体比较,若ID和某个相等且其count>0,那么其count++,若三个ID中某个count为0,置这个ID为查询的ID,count++,若和三个均不相等,表示 三个ID的count均>0,刚三个ID的count--;循环完成。代码如下:

Person person[3];
        foreach(IDType id in IDs)
        {
            for(int i=0;i<3;i++)
            {
                if(person[i].count==0)
                {
                    person[i].ID=id;
                    person[i].count++;
                    break;
                }
                if(person[i].ID==id)
                {
                    person[i].count++;
                    break;
                }
            }
            for(int i=0;i<3;i++)
                person[i].count--;
        }


遍历完成后结果中就是三个水王的iD

你可能感兴趣的:(算法设计)