2009-10-08 34 views
0

如何創建一個方法來接收兩個數組作爲參數,並返回一個數組,該數組充滿了這兩個數組中的項目?如何查找在兩個數組中的對象並將其快速添加到另一個數組中?

輸入(數組1中方法中傳遞): 「莉莎」, 「喬治」, 「馬里奧」] 輸入(ARRAY2在方法中傳遞):[ 「路易」, 「蘇珊」, 「莉莎」]

方法應該返回:[「麗莎」]

我不能使用任何內置的方法,所以我不得不建立我自己的算法,但我堅持了過去2小時。我如何在Java中實現這一點?

編輯:基督蠟燭棒。這不是作業。算法上我只是真正的低級。尤其是那些基本的東西,特別是我從來沒有用過的外語。 :P

+2

如果您不能使用內置的方法,它是家庭作業或一個有趣的原因。如果它是作業,你能標記它嗎?如果這是有趣的東西,你可以分享嗎? – ctd

+1

如果它不是家庭作業,爲什麼你不能使用收藏最大的優勢?在這種情況下滾動你自己是錯誤的。 – duffymo

回答

3

一個快速的方法是如下算法:

For each item in list1, add it to a dictionary. 
For each item in list2, check if it exists in dictionary, 
if item exists, add it to list3 
else continue. 
return list3. 
+0

@Alan,我建議你用「set」替換「dictionary」(假設我們並不總是在談論單詞)。 –

+0

感謝@Bob,但是這是一個更通用的算法,不涉及任何語言。 – Alan

+0

@Alan:「set」是比「dictionary」更通用的術語。此外,字典是從鍵到值的映射,並且您不需要映射......只是一個集合。 –

2

蠻力。

在第一個數組上循環。在那個循環中,在第二個數組上有另一個。比較兩者中的條目,如果匹配,將它們添加到新數組中。

+0

蠻力是O(N * 2)。根據您使用的Set實現(以及某些其他假設),使用集合的解決方案是O(N)或O(NlogN)。 –

+0

同意,但他說他不能使用內置函數,所以我假定不使用java.util集合。當然,對於他提出的Big-Oh符號的小例子來說,這是無關緊要的。艾倫的答案與我的答案非常相似 - 兩個嵌套循環 - 它已被投票三次。 – duffymo

1
[] result = ... 

    foreach(itemA in a) { 
     foreach( iteamB in b) { 
      if(itemB == itemA) { // if they are in both places 
        r[] = itemB // append it to the result 
      } 
     } 
    } 
    return result; 
4

如何:

private static String[] findCommon(final String[] array1, 
     final String[] array2) { 
    final Set<String> common = new HashSet<String>(); 
    common.addAll(Arrays.asList(array1)); 
    common.retainAll(Arrays.asList(array2)); 
    return common.toArray(new String[0]); 
} 
+0

+1爲retainAll()。我從來沒有注意到...... –

+0

「...不能使用任何內置方法...」 - 這不排除使用java.util集合? – duffymo

+0

沒有發現那個duffymo。雖然,因爲它不是家庭作業,我不明白爲什麼會存在這個約束;-) – toolkit

相關問題