• 软件工程——找水王(续)


    一、题目

      随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗

    二、设计思路

      参考原来问题的解法,如果每次删除4个不同的ID(不管是否超过总数1/4的ID),那么,剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4。可以通过不断重复这个过程,把ID总数降低,从而得到问题的答案。具体方法:用candidate[3]记录三个候选ID,用count[3]记录它们的累积次数,然后遍历整个ID列表,每处理一个ID,若与candidate[i]中的某一个相同,则count[i]++,若与三个都不同,则说明找到了四个互不相同的ID,将三个count[i]--,也就相当于“删除了四个不同ID”,若某一个count[i]==0,则更新之。

    三、源代码

     1 package com.java.lianxi;
     2 
     3 public class lianxi8 {
     4     public static void main(String arg[]){
     5         int ID[]={1,2,1,1,2,3,2,3,3,4,4};
     6         Find(ID);
     7     }
     8     public static void Find(int ID[])  
     9     {  
    10         int i,N=ID.length;
    11         int nTimes[]=new int[3]; 
    12         int candidate[]=new int[3]; 
    13         nTimes[0]=nTimes[1]=nTimes[2]=0;  
    14         candidate[0]=candidate[1]=candidate[2]=0;  
    15         for(i = 0; i < N; i++)  
    16         {  
    17             if(ID[i]==candidate[0])  
    18             {  
    19                  nTimes[0]++;  
    20             }  
    21             else if(ID[i]==candidate[1])  
    22             {  
    23                  nTimes[1]++;  
    24             }  
    25             else if(ID[i]==candidate[2])  
    26             {  
    27                  nTimes[2]++;  
    28             }  
    29             else if(nTimes[0]==0)  
    30             {  
    31                  nTimes[0]=1;  
    32                  candidate[0]=ID[i];  
    33             }  
    34             else if(nTimes[1]==0)  
    35             {  
    36                  nTimes[1]=1;  
    37                  candidate[1]=ID[i];  
    38             }  
    39             else if(nTimes[2]==0)  
    40             {  
    41                  nTimes[2]=1;  
    42                  candidate[2]=ID[i];  
    43             }  
    44             else  
    45             {  
    46                  nTimes[0]--;  
    47                  nTimes[1]--;  
    48                  nTimes[2]--;  
    49              }  
    50         } 
    51         for(i=0;i<3;i++)
    52         {
    53             System.out.println("水王"+(i+1)+"的ID是"+candidate[i]);
    54         }
    55         } 
    56 
    57 }

    四、截图

    五、实验总结

      这次找水王的扩展,和原来找水王的思路是一样的,都是采用互消的方法,只不过由两两互消变为了四个四个的消。我们以后解决这种扩展问题时,一定要站在原来问题的基础上思考,这样思路就会更加清晰,解决问题的效率会更高。

  • 相关阅读:
    [Github]在仓库中添加Sponsor赞助者按钮
    SpringMVC面试题常问的29道(附答案)
    Spring常问面试题及答案汇总(2020版)
    Java面试题及答案整理(2020最新版)
    MySQL数据库下载及安装教程(最新版!史上最详细!)
    +0与-0在plc传递数值上的坑
    halcon极坐标转换与亮暗缺陷检测结合的案例(转)
    互联网项目管理
    zabbix 监控IO DISK
    转 更改当前schema
  • 原文地址:https://www.cnblogs.com/maximumminimum/p/4457975.html
Copyright © 2020-2023  润新知