2013-03-17 41 views
1

我有這樣的for循環:For循環Set,它是O(n)?

public void method(int[] arr) { 
    Set set = new HashSet(); 

    for(int i = 0; i < arr.length; i++){ 
     set.add(arr[i]); 
    } 
} 

是O(n)的這個方法?

+0

我不明白 – PSR 2013-03-17 09:55:02

+0

就我所知,HashSet在添加時是恆定的,在這種情況下,那麼是的,它是O(n)。 – 2013-03-17 09:56:18

回答

4

如果使用HashSet,HashSet具有O(1),並且使用for循環將它與O(n)相乘。因此,整個構造具有O(n)

-1

HashSet具有接近線性的插入性能,所以是的:n這樣的操作將是O(n)。

注意,我會做這個代替,達到完全相同的結果,因爲所有的代碼做什麼:

Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr)); 

您shoukd鍵入您的設置也如上。

+0

但是'Set'會有一個大小,我同意輸入'Set.' – Sam 2013-03-17 10:03:04

+0

你是什麼意思?這段代碼實現了你的代碼的功能。 – Bohemian 2013-03-17 10:05:31

+0

不,在我的代碼中,[1,2,3]'set'的大小爲3,但您的代碼大小始終爲1! – Sam 2013-03-17 10:07:02