を使用して連続したサブリストの負の合計を見つける:私は、元のリストのすべての要素私は、次のコードを最適化しようとしていたJava 8
ためstartIndex
から
newIndex + 1
に反復避けたい
private final static class SubarrayProcessorNegativeSumStrategy
implements SubarrayProcessorStrategy {
@Override public Integer apply(Integer[] array) {
final List<Integer> numbers = Arrays.asList(array);
return (int) IntStream.range(0, numbers.size())
.map(index -> findNegativeSums(numbers, index)).sum();
}
private Integer findNegativeSums(final List<Integer> numbers,
final Integer startIndex) {
final Integer numbersSize = numbers.size();
if (startIndex < numbersSize) {
return (int) IntStream.range(startIndex, numbers.size())
.map(newIndex -> numbers.subList(startIndex, newIndex + 1)
.stream().mapToInt(x -> x).sum())
.filter(sum -> sum < 0).count();
} else {
return 0;
}
}
を
numbers.subList(startIndex, newIndex + 1).stream().mapToInt(x -> x).sum()
私はこれをどのように達成することができますか?同じ結果を得るために改善を施すことができるのであれば?
あなたはStream
APIを経由して、それを実装する場合は、List
APIの迂回を経由する必要がないあなたに
よろしく、
あなたのコードがどのように機能するかを理解するための少しのテストコードを提供できますか? 最適化の主な目的は何ですか:ランタイムまたはメモリフットプリント? – cyberbrain
こんにちは@cyberbrain、例えばA = [1、-2、4、-5、1]は9を出力します。私はメモリを最適化しようとしています。ありがとう –
@ eduardo.leonこの小さな例を含めて質問を更新してください – Flown