List<Integer> arrayList = Arrays.stream(A)
.boxed()
.filter(c -> (c > -1001 && c < 1001)) // predicate
.collect(Collectors.toList());
有时我使用filter,如您所见,有时如果需要,我使用distinct/sort。但是我仍然有很多运行时错误。
我会很乐意提供一些如何处理它的技巧。
@cricket_007
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] A) {
List<Integer> integerList = Arrays.stream(A)
.boxed()
.collect(Collectors.toList());
if ((integerList.size() == 2 && integerList.get(0) == integerList.get(1)) || A.length == 1) {
return 0;
}
if ((integerList.size() == 2 && integerList.get(0) != integerList.get(1))) {
return Math.abs(integerList.get(0) - integerList.get(1));
}
int sublistSum1;
int sublistSum2;
List<Integer> scoreList = new ArrayList<>();
Integer temp;
for (int i = 1; i < integerList.size(); i++) {
sublistSum1 = integerList.subList(0, i).stream().mapToInt(n -> n).sum();
sublistSum2 = integerList.subList(i, integerList.size()).stream().mapToInt(n -> n).sum();
temp = Math.abs(sublistSum1 - sublistSum2);
scoreList.add(temp);
}
return scoreList.stream()
.min(Integer::compareTo)
.get();
}
}
我的代码:
import java.util.Arrays;
class Solution {
public int solution(int[] A) {
if (Arrays.stream(A).distinct().count() == 1) {
return 0;
}
int score = 0;
for (int i = 0; i < A.length; i++) {
if (A[i] == 0) {
for (int j = 1; j < A.length; j++) {
if (A[j] == 1 && j > i) {
score++;
}
}
}
}
if (score < 1_000_001) {
return score;
}
return -1;
}
}
所以基本上,当我试图用嵌套循环解决这个任务时,我得到了O(n^2)的算法复杂度。如何解决?
首先,您必须问自己是否真的需要列表
(需要装箱),或者int[]
数组是否也足以完成任务。
所以
int[] array = Arrays.stream(A)
.filter(c -> (c > -1001 && c < 1001))
.toArray();
会更有效率。但是,如果您确实需要列表
,那么在对值进行装箱之前,您仍然应该做尽可能多的工作,即。
List<Integer> arrayList = Arrays.stream(A)
.filter(c -> (c > -1001 && c < 1001))
.boxed()
.collect(Collectors.toList());
这样,只对匹配的int
值进行装箱,而不是对所有值进行装箱。这是一个流实现本身无法执行的优化,因为当您使用.boxed().filter(c->(c>-1001&&c<1001))
时,您是在流
上调用filter
,传递一个谓词
而不是intpredicate
,实现别无选择,只能向该代码传递一个整数
。
类似的事情也适用于sort
;当应用于基元类型数据时,它比integer
对象更有效。distinct
也有类似的潜力,但afaik当前的实现没有实现这一点。
你必须自己实现更好的算法,这就是挑战所在。
求数组中不包含的最小正整数的一个解决方案是
int first = Arrays.stream(A)
.filter(i -> i >= 0)
.collect(BitSet::new, BitSet::set, BitSet::or)
.nextClearBit(0);
如果“积极”表示“大于零”,则必须使用i>0
和NextClearBit(1)
。该解决方案还将支持并行处理。
问题内容: 我正在寻找一种数学解决方案,该解决方案可以处理真实(长,大,大,风暴)数字。我还没有发现任何东西,但是我不想现在这个问题还没有解决。我正在寻找一种简单的Number解决方案,例如MicrosoftExcelPrecision(30位十进制)或BigInteger(Java)解决方案。当然是用Java语言编写的。 问题答案: BigInt现在是Firefox和Chrome的一部分; 你不
问题内容: 我有一种算法,当前会分配很大的双精度数组,它会经常更新和搜索。数组的大小为N ^ 2/2,其中N是算法在其上进行操作的行数。为了与算法周围的应用程序相关联,我还必须保留整个内容的副本。 当然,这对我的算法可以处理的行数施加了限制,因为我要应对堆的限制。到现在为止,我还没有要求使用该算法的人员更新- Xmx设置以分配更多的空间,并且效果很好。但是,我现在遇到了一个真正的问题,我需要此数组
问题内容: 考虑以下代码(节点v5.0.0) 为什么是真的? javascript可以处理的最大整数值是多少? 我正在实现最大2 ^ 64的随机整数生成器。我应该注意任何陷阱吗? 问题答案: JavaScript中的所有数字均为浮点数,这意味着整数始终表示为 尾数有53位。您可以使用指数获取更高的整数,但是它们不再是连续的。例如,通常需要将尾数乘以2(指数1)才能达到第54位。 但是,如果乘以2,
我正在尝试用H2O(3.14)训练机器学习模型。我的数据集大小是4Gb,我的计算机RAM是2Gb,带有2G交换,JDK 1.8。参考本文,H2O可以使用2Gb RAM处理大型数据集。 关于大数据和GC的说明:当Java堆太满时,我们会进行用户模式的磁盘交换,即,您使用的大数据比物理DRAM多。我们不会因GC死亡螺旋而死亡,但我们会降级到核心外的速度。我们将以磁盘允许的速度运行。我个人测试过将12G
我有一个方法,看起来是这样的: null 谢谢!
我使用axios从API获取数据,然后使用节点中的数据。js应用程序。数据是由300个对象组成的数组,如下所示: 获取此对象数组后,我需要转换每个对象:用新的键替换其键,并将一些值转换为适当的数据类型(字符串到浮点): 现在我只使用For循环,并在每次迭代中转换每个对象的键和值。但是像这样的物体将会有成千上万。它将是处理这些数据的工人。在节点中处理它们的最佳方式是什么。js? 我将使用一些现成的队