stream solution for n sales
parent
30543abaf9
commit
2656ded38f
@ -1,20 +1,57 @@
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.io.*;
|
import java.util.stream.IntStream;
|
||||||
import java.math.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Template code to help you parse the standard input
|
|
||||||
* according to the problem statement.
|
|
||||||
**/
|
|
||||||
class Solution {
|
class Solution {
|
||||||
|
|
||||||
public static void main( String[] args ) {
|
public static void main( String[] args ) {
|
||||||
Scanner in = new Scanner( System.in );
|
|
||||||
// read values with in.next...() methods
|
// read values with in.next...() methods
|
||||||
|
var scanner = new Scanner( System.in );
|
||||||
// code your solution here
|
var sellCount = scanner.nextInt();
|
||||||
|
var prices = scanner.tokens()
|
||||||
|
.mapToInt( Integer::valueOf )
|
||||||
|
.toArray();
|
||||||
|
|
||||||
// Write result with System.out.println()
|
// Write result with System.out.println()
|
||||||
System.out.println( "value" );
|
System.out.println( maxProfits( sellCount, prices ));
|
||||||
|
}
|
||||||
|
|
||||||
|
// code your solution here
|
||||||
|
// 0 - 1 | ... | x-sellCount - x --> 0 - x-1 | ... | x-1 - x
|
||||||
|
private static int maxProfits( int sellCount, int[] prices ) {
|
||||||
|
return IntStream.range( 0, sellCount )
|
||||||
|
.parallel()
|
||||||
|
.map( sale -> {
|
||||||
|
// recursion end condition
|
||||||
|
if ( sellCount == 1 ) {
|
||||||
|
return maxProfit( prices );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return IntStream.range( 2, prices.length )
|
||||||
|
.parallel()
|
||||||
|
.map( index -> {
|
||||||
|
var firstRange = Arrays.copyOfRange( prices, 0, index );
|
||||||
|
final int max1 = maxProfit( firstRange );
|
||||||
|
|
||||||
|
var secondRange = Arrays.copyOfRange( prices, index - 1, prices.length );
|
||||||
|
// reduce range sizes recursively
|
||||||
|
final int max2 = maxProfits( sellCount - 1, secondRange );
|
||||||
|
|
||||||
|
return max1 + max2;
|
||||||
|
}).max().orElse( 0 );
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.max().orElse( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int maxProfit( int[] prices ){
|
||||||
|
return IntStream.range( 0, prices.length )
|
||||||
|
.map( index -> {
|
||||||
|
var range = Arrays.copyOfRange( prices, Math.min( index + 1, prices.length - 1 ), prices.length );
|
||||||
|
int max = IntStream.of( range ).max().orElse( 0 );
|
||||||
|
// difference between current price and future maximum
|
||||||
|
return max - prices[index];
|
||||||
|
})
|
||||||
|
.max().orElse( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue