根據您的實際需求,您可以進行另一種折衷。
在1個Integer對象的存儲成本,你可以用複雜性讓您的最大值O(1)不排序,用O(1)成本PUSH與爲O(n)成本時從堆棧中彈出元素。
public class IntStackWithMax {
private Integer maxVal = Integer.MIN_VALUE;
private Vector<Integer> values = new Vector<Integer>();
// cost O(1)
public Integer getMaxVal() {
return maxVal;
}
//cost O(1)
public boolean push(Integer item) {
maxVal = Math.max(maxVal, item);
return values.add(item);
}
//cost O(n) (!!!)
public Integer pop() {
Integer result = values.remove(values.size() - 1);
maxVal = Collections.max(values);
return result;
}
//cost O(1)
public Integer peek() {
return values.lastElement();
}
}
也請注意,這是不線程安全的。
爲什麼'Stack'?或者任何「收藏」?它不可能。 – Andremoniy
它是不可能的。您訪問的最後一個值始終可以具有最大值。 – vish4071
如果你不能用'O(log(n))'(比如Binary Search Tree)或'O(1)'(比如Hash Table)實現搜索的數據結構來更改'Stack',那麼我認爲你不可能獲得比線性更好的性能。 –