File tree 1 file changed +38
-0
lines changed
1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+
3
+ private static final long MOD = 1000_000_007 ;
4
+
5
+ public int numOfWays (int [] nums ) {
6
+ int n = nums .length ;
7
+ long [][] dp = new long [n ][n ];
8
+ for (int i = 0 ; i < n ; i ++) {
9
+ dp [i ][0 ] = dp [i ][i ] = 1 ;
10
+ }
11
+ for (int i = 2 ; i < n ; i ++) {
12
+ for (int j = 1 ; j < i ; j ++) {
13
+ dp [i ][j ] = (dp [i - 1 ][j - 1 ] + dp [i - 1 ][j ]) % MOD ;
14
+ }
15
+ }
16
+ List <Integer > list = Arrays .stream (nums ).boxed ().collect (Collectors .toList ());
17
+ return (int ) ((dfs (list , dp ) - 1 ) % MOD );
18
+ }
19
+
20
+ private long dfs (List <Integer > nums , long [][] dp ) {
21
+ int n = nums .size ();
22
+ if (n < 3 ) {
23
+ return 1 ;
24
+ }
25
+ List <Integer > leftNodes = new ArrayList <>();
26
+ List <Integer > rightNodes = new ArrayList <>();
27
+ for (int i = 1 ; i < n ; i ++) {
28
+ if (nums .get (i ) < nums .get (0 )) {
29
+ leftNodes .add (nums .get (i ));
30
+ } else {
31
+ rightNodes .add (nums .get (i ));
32
+ }
33
+ }
34
+ long leftCount = dfs (leftNodes , dp ) % MOD ;
35
+ long rightCount = dfs (rightNodes , dp ) % MOD ;
36
+ return (((leftCount * rightCount ) % MOD ) * dp [n - 1 ][leftNodes .size ()]) % MOD ;
37
+ }
38
+ }
You can’t perform that action at this time.
0 commit comments