zoukankan      html  css  js  c++  java
  • 课堂练习(寻找水王)

    第一步:实现水王查找

    设计思路:

    利用哈希表的方法,将数组中的所有信息都存入到哈希表中,因为水王的发帖量是所有人中最多的,所以通过哈希表的一个遍历找出ID号出现次数最多的那个值就是水王了

     1 package t2;
     2 /*
     3  * 
     4  * 用哈希表的方法寻找水王
     5  */
     6 import java.util.HashMap;
     7 import java.util.Iterator;
     8 import java.util.Scanner;
     9 
    10 public class A {
    11     static Scanner in = new Scanner(System.in);
    12 
    13     public static void main(String[] args) {
    14         // TODO 自动生成的方法存根
    15         String[] num =  {"001","002","001","003","001","004","001","006","001","001"};
    16         String a = new String();
    17     
    18         HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
    19         for (int i = 0; i < num.length; i++) 
    20         {
    21             if (!has.containsKey(num[i])) 
    22             { 
    23                    has.put(num[i], 1);
    24             } 
    25             else 
    26             {
    27                    has.put(num[i],has.get(num[i])+1 );
    28             }
    29         }
    30         Iterator<String> iterator = has.keySet().iterator();
    31         int max=0;
    32             while(iterator.hasNext())
    33             {
    34                 String word = (String) iterator.next();
    35                 if(max < has.get(word))
    36                 {
    37                     max=has.get(word);
    38                     a=word;
    39                 }
    40              }
    41             System.out.println("水王是:" + a);
    42     }
    43 }

    第二步:对程序进行改进,实现在一次遍历之后就可以找到水王的位置

    设计思路:在循环中对每个数组元素遍历,首先对第一个赋值为b,如果接下来的值与b进行比较,设置计数器,如果与b相同则计数器加1如果不同计数器减1,然后就与接下来的元素进行比较(这就相当于如果不同就将两个元素删除,根据提议最后在减去所有不同的过后,就只剩下水王了,要知道水王ID出现的次数超过了一半)如果计数器减为负数,则将下一个值赋值给b重复以上步骤,最后b的值就是水王的ID号了。

     1 package t2;
     2 
     3 public class B {
     4     
     5          
     6         /**
     7          * @param args
     8          */
     9         public static void main(String[] args) {
    10             // TODO Auto-generated method stub
    11             //用户id集合
    12             String a[]=new String[]{"001","002","001","003","001","004","001","006","001","001"};
    13             String b=a[0];
    14             int n=0;
    15             for(int i=0;i<a.length;i++)
    16             {
    17                 if(a[i]==b)
    18                 {
    19                     n=n+1;
    20                 }
    21                 else
    22                 {
    23                     n=n-1;
    24                     if(n<0)
    25                     {
    26                         b=a[i];
    27                         n=1;
    28                     }
    29                 }
    30             }
    31             System.out.print("水王是:"+ b);
    32         }
    33     
    34 
    35 }

    个人总结:这就是今天课上所讲的一个内容,通过适当的方法进行合理的规划,虽然当你知道思路之后感觉这个算法会很简单,但是当你初次接触这个问题时,让你独立的处理这个问题时往往都是通过消耗大量空间时间的办法进行处理,进行优化的过程还是很艰难的,这也就转化到了现实的项目问题中,如何使用简单的方法使得我们能更简单便捷的解决实际的操作问题

  • 相关阅读:
    指针传递的一些必要的记录,避免以后又忘记了。
    记录下这几个FMX控件的地址
    boost.ASIO-可能是下一代C++标准的网络库
    对本程序使用自己的代理服务器
    C# 为网络程序添加用户代理
    InternetOpen怎么使用代理
    改变代理服务器
    在Delphi中,关于数组名称
    Delphi 获取进程路径及命令行参数
    关于在asp.net的web页面中的全局变量问题
  • 原文地址:https://www.cnblogs.com/1gaoyu/p/10951769.html
Copyright © 2011-2022 走看看