1
- # Time: O(n^2 * d )
2
- # Space: O(n^2 )
1
+ # Time: O(d * n^2 )
2
+ # Space: O(d * n )
3
3
4
4
class Solution (object ):
5
5
def minDifficulty (self , jobDifficulty , d ):
@@ -10,17 +10,15 @@ def minDifficulty(self, jobDifficulty, d):
10
10
"""
11
11
if len (jobDifficulty ) < d :
12
12
return - 1 ;
13
-
14
- max_in_range = [[0 ]* len (jobDifficulty ) for _ in xrange (len (jobDifficulty ))]
15
- for i in xrange (len (jobDifficulty )):
16
- max_in_range [i ][i ] = jobDifficulty [i ]
17
- for j in xrange (i + 1 , len (jobDifficulty )):
18
- max_in_range [i ][j ] = max (max_in_range [i ][j - 1 ], jobDifficulty [j ])
19
13
20
- dp = [[float ("inf" )]* d for _ in xrange (len (jobDifficulty ))]
21
- for i in xrange (len (jobDifficulty )):
22
- dp [i ][0 ] = max_in_range [0 ][i ]
23
- for j in xrange (1 , d ):
24
- for k in reversed (xrange (i )):
25
- dp [i ][j ] = min (dp [i ][j ], dp [k ][j - 1 ] + max_in_range [k + 1 ][i ])
26
- return dp [len (jobDifficulty )- 1 ][d - 1 ]
14
+ dp = [[float ("inf" )]* len (jobDifficulty ) for _ in xrange (d )]
15
+ dp [0 ][0 ] = jobDifficulty [0 ]
16
+ for i in xrange (1 , len (jobDifficulty )):
17
+ dp [0 ][i ] = max (dp [0 ][i - 1 ], jobDifficulty [i ])
18
+ for i in xrange (1 , d ):
19
+ for j in xrange (i , len (jobDifficulty )):
20
+ curr_max = jobDifficulty [j ]
21
+ for k in reversed (xrange (i , j + 1 )):
22
+ curr_max = max (curr_max , jobDifficulty [k ])
23
+ dp [i ][j ] = min (dp [i ][j ], dp [i - 1 ][k - 1 ] + curr_max )
24
+ return dp [d - 1 ][len (jobDifficulty )- 1 ]
0 commit comments