LinkedList和ArrayList都是建立在List介面上,然而LinkedList使用傳統的指標技術來建立一個串列,而ArrayList使用陣列來實作List功能。那么,在使用數字之前,人們可以聲稱它將在螢屏后面使用ArrayList或LinkedList?
我是如何得到這個問題的?
我是如何得到這個問題的?
public int[] smallestRange(List<List<Integer> > nums) {
}
}
大多數The Leetcode Java問題都有這種格式的輸入。如果沒有事先了解nums是如何被實體化的,有人如何使用nums.get(i)函式(list.get(i)在ArrayList中是O(1),在linkedList中是O(n))
uj5u.com熱心網友回復:
99%的情況下,這將是一個ArrayList,你想在你的代碼中使用一個ArrayList。它們使用的記憶體更少,速度更快,而且利用LinkedList的代碼通常可以改寫為使用兩個ArrayLists。主要的缺點是add()偶爾會以O(n)時間運行。
怎么會有人使用nums.get(i)?
你不需要。你利用串列是Iterable的優勢,做一些類似for-each回圈的事情:
for (var i : list) {
...
}
對于LinkedList和ArrayList來說,這都是以O(n)時間運行的。
技術上,有一個叫做RandomAccess的介面,你可以檢查一下get()是否為O(1)。不過,你可能不需要它。使用迭代器。
if (list instanceof RandomAccess) {
list.get(...)。
uj5u.com熱心網友回復:
你不能直接斷定什么是List介面的默認實作。介面只是一個規范,你有多種List介面的實作,就像你在圖片中提到的。
每個實作都將覆寫串列介面中提到的方法,但它們的邏輯將基于資料結構而有所不同。
現在它完全取決于你想要的基于你的需求的實作。無論你是有空間限制還是有時間限制。但兩者都有相同的方法,因為它們是在介面中指定的。
根據編碼挑戰平臺,我認為他們指定了他們呼叫這個方法的代碼。你可以在那里檢查,但如果沒有指定,那么很可能他們會選擇ArrayList--用于時間限制。我認為用戶不應該擔心他們選擇的實作。正如我所說的,用戶應該知道他的需求是什么,然后只選擇實作。
uj5u.com熱心網友回復:
它可以是其中之一:
List<List<Integer>> list1 = new ArrayList< > ();
List<List<Integer>> list2 = new LinkedList<>()。
int[] x = smallestRange(list1); /works
int[] y = smallestRange(list2); //也可以。
你需要使你的代碼能夠滿足這兩種型別
。轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/330166.html
標籤:

