2014-09-25 24 views
1

對於包含隨機數和給定個數的給定較大字符串,我怎樣才能找到每個數的個數?記事本++找到函數的工作原理?

我的方法:

  1. 從第一數目發現數的計數,並存儲該並行數到另一個數組/串開始。
  2. 對於第二個數字,首先在並行數組中查找是否存在,如果不是,則查找主字符串中的count。
  3. 繼續。

是否有任何其他更快速和有效的方式來做到這一點,因爲我使用的記事本/記事本++查找功能,相比我的方法工作得非常快。

代碼:

List<Integer> list=new ArrayList<Integer>(); 
List<Integer> subList=new ArrayList<Integer>(); 

for(int i=0;i<list.size();i++){ 
    int count=1; 
    int number=list.get(i); 

    if(!subList.contains(number)){ 
     for(int j=i+1;j<list.size();j++){    
      if(list.get(j)==number){ 
       count++; 
      } 
     } 
     System.out.println(number+" "+count); 
     subList.add(number); 
    } 
} 
+0

不要用Java編寫你的應用程序,通常是非常快速地獲得它的一種非常可靠的方法。並採用一種聰明的方式來存儲數據。 – christopher 2014-09-25 19:27:40

+0

你能澄清你的問題嗎?這很難理解。一個例子會很好。 – MattPutnam 2014-09-25 19:27:40

+5

您是否編寫過僞代碼或其他代碼來演示您的想法? – Compass 2014-09-25 19:27:57

回答

0

現在,我們對你有什麼示範,我們可以更好地分析形勢。

它看起來像你不知道如何將計數與每個單獨的元素相關聯。你正在增加一個計數,但它與任何項目都沒有關聯,可能是最大的混亂因素。

這是一個像HashMap那樣的工作。

在這種情況下,您想要將您找到的號碼i與其自己的個人計數c相關聯。計數將從1開始,首先我們找到,然後隨着我們發現更多而增加。使用HashMap的思想,我們可以取任何你能想到的整數,並將它用作關鍵字,然後將它的計數c作爲你從關鍵字獲取的值。

HashMap<Integer, Integer> findMap = new HashMap<Integer, Integer>(); 

    for (int i = 0; i < list.size(); i++) { 
     int number = list.get(i); 

     if (findMap.get(number) == null) { 
      // we didn't find it in the map, so we put it in with a counter of 1 
      findMap.put(number, 1); 
     } 
     else { 
      // we already have inserted it, we should add 1 to counter 
      findMap.put(number, findMap.get(number) + 1); 
     } 
    } 

    //to get everything out of the HashMap 
    for (Integer i : findMap.keySet()) { 
     System.out.println(i + ": " + findMap.get(i)); 
    } 

作爲OP的任務,如果您有足夠的經驗,請確定代碼插入部分的大O.