[英]How to remove only one max (min) from a list using Java 8 stream API in O(N) time and O(C) space complexity
這是一個代碼,用於從列表中僅除去一個最大值(在這種情況下為第一個,但這無關緊要)。 它是O(n)
在時間和O(n)
在空間(超出輸入)。
public List<Integer> removeOneOfTheMax(List<Integer> nums) {
int max = Integer.MIN_VALUE;
int maxIndex = -1;
Iterator<Integer> it = nums.iterator();
for (int i = 0; it.hasNext(); i++) {
Integer temp = it.next();
if (max < temp) {
maxIndex = i;
max = temp;
}
}
nums.remove(maxIndex);
return nums;
}
1.與使用Java 8流API的方法等效嗎? 我想保留時間和空間的復雜性,因此不允許排序。
2.實際上,如果將LinkedList
傳遞到上述代碼中,則空間復雜度將為O(C)
(同樣,超出輸入范圍),但是據我所知, .stream()
創建了一個附加數據結構,因此流API等效空間至少必須為O(N)
。 如果我錯了,請糾正我。
流解決方案可能看起來像這樣:
int maxIndex = IntStream.range(1, nums.size()).reduce(0, (i, j) -> {
int left = nums.get(i);
int right = nums.get(j);
return Integer.max(left, right) == left ? i : j;
});
nums.remove(maxIndex);
下方將有一個Spliterator
。
流操作本身不會創建其他數據結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.