0808--求出现次数最多的n个url

 
import java.util.*; 
import java.io.*; 

class Url{ 
     String url; 
     int count; 
     public void setUrl(String url){ 
          this.url=url; 
     } 
     public void setCount(int count){ 
          this.count=count; 
     } 
     public String getUrl(){ 
          return this.url; 
     } 
     public int getCount(){ 
          return this.count; 
     } 

} 

public class MaxK{ 

     Map<String,Integer> map; 

     public MaxK(){ 
          map=new HashMap<String,Integer>(); 
     } 

     public int partion(int low,int high,Url[]array){ 
          int i=low; 
          int j=high; 
          int c; 
          c=array[j].getCount(); 
          Url tmp=array[j]; 
          while(i!=j){ 
               while((array[i].getCount()<c)&&(i<j)){ 
               i++; 
          } 

          if(i<j){ 
               array[j]=array[i]; 
               j--; 
          } 

          while((array[j].getCount()>c)&&(i<j)){ 
               j--; 
          } 

          if(i<j){ 
               array[i]=array[j]; 
               i++; 
          } 

     } 
          array[i]=tmp; 
          return i; 
     } 

     public void getMaxK(int k,Url[] array){ 
          int low=0,i=0; 
          int len=array.length; 
          int high=len-1; 

          while(true){ 
               i=partion(low,high,array); 
               if(i==(k-1)){ 
                    System.out.println(i+"=="+(k-1)); 
                    break; 
               } 

          if(i<(k-1)){ 
               low=i+1; 
          }else{ 
               high=i-1; 
          } 
     } 

     System.out.println("\nthe sorted array:\n"); 
     for(i=0;i<k;i++){ 
          System.out.println(array[i].getUrl()); 
     } 
  } 


     public Url[] setUrlArray(String path){ 
          try{ 
               BufferedReader br=new BufferedReader(new FileReader(path)); 
               String str; 
               Integer i; 

               while((str=br.readLine())!=null){ 
                    if(map.containsKey(str)){ 
                         int count=map.get(str).intValue(); 
                         i=new Integer(count+1); 
                   }else{ 
                         i=new Integer(1); 
                   }
                    map.put(str,i); 
              } 
          }catch(Exception ex){ 
          } 

          int n=map.size(); 
          int i=0; 
          Url[] array =new Url[n]; 
          Iterator it=map.entrySet().iterator(); 

          while(it.hasNext()){ 
               Map.Entry me=(Map.Entry)it.next(); 
               array[i]=new Url(); 
               array[i].setUrl((String)me.getKey()); 
               array[i].setCount(((Integer)me.getValue()).intValue()); 
               System.out.println("array["+i+"].url="+(String)me.getKey()+","+"array["+i+"].count="+((Integer)me.getValue()).intValue()); 
               i++; 
          } 
          return array; 
     } 


     public static void main(String[] args){ 
          MaxK mk=new MaxK(); 
          Url array[]=mk.setUrlArray("urls.txt"); 
          mk.getMaxK(3,array); 
          int len=array.length; 
          int i=0; 
          while(i<len){ 
               System.out.println("array["+i+"].url="+array[i].getUrl()+","+"array["+i+"].count="+array[i].getCount()); 
          i++; 
          } 
     } 

} 

 

 

用shell实现:

cat url.txt|sort|uniq -c|sort

 

shell总是那么强大,(⊙o⊙)…

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值