2013-06-22 68 views
0
public static int Count(List<Integer> lst1, List<Integer> lst2) 
{ 
    Iterator<Integer> itr1 = lst1.iterator(); 

    int count=0; 
    while (itr1.hasNext()) 
    { 
     Integer x = itr1.next(); 
     Iterator<Integer> itr2 = lst2.iterator(); 
     while (itr2.hasNext()) 
      if (x.equals(itr2.next())) 
       count++; 
    } 

    return count; 
} 
  1. 如果ArrayList傳遞給lst1和lst2。
  2. 如果LinkedList傳遞給lst1和lst2。

我去,因爲兩者的拳頭while循環O(n)然後同時O(n)的secong和如果還O(n) = O(n^3)。我不知道我是否錯了?以下代碼的大運行時間是多少?

+1

n = list1.size m = list2.size - > O(n * m),你應該在這種情況下使用BRACES來提高可讀性 – nachokk

+2

@nachokk我不同意。適當的縮進非常重要。這裏的大括號對可讀性沒有任何作用;如果它們只與正確性有關(但我在其他地方也有爭論)。 –

+0

@KonradRudolph真的嗎?第二,在哪裏開放和結束太清楚了?我必須想5秒鐘來實現開始和結束 – nachokk

回答

6

這是O(size(lst1)*size(lst2))。對於所有x i in lst1,您將x ilst2中的每個元素進行比較。在這種情況下,它更準確地說是Θ(size(lst1)*size(lst2)),因爲它的上下都有size(lst1)*size(lst2)

0

毫無疑問.. @steven給了一個不錯的數學代表。發生在這裏的大O是爲該方法提供的列表大小的乘積。

因爲list1中的每個元素都與list2中的每個元素進行比較。因此循環運行的時間爲SizeofList1*SizeOfLit2

這裏是beginner guide與loops.Hope你會得到它。

相關問題