以下代码用于从列表中仅删除一个最大值(在本例中为第一个值,但这无关紧要)。这是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)
在太空。如果我错了请纠正我。
流解决方案could看起来像这样:
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
.
流操作本身不会创建额外的数据结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)