Q54 Partition Array for Maximum Sum - LeetCode1043
Sat Sep 09 2023 16:43:37 GMT+0000 (Coordinated Universal Time)
Saved by
@Ayush_dabas07
class Solution {
public int maxSumAfterPartitioning(int[] arr, int k) {
/* front partitioning , we partition the left as we go for atmost length k and make
a right call to (i+1)to give its best sum of partition of k <=3
*/
int n = arr.length;
// return solve(arr , 0 ,k , new Integer[n] );
int dp[] = new int[n+1];
for(int i = n-1 ; i>=0 ; i--){
int max = (int)-1e9;
int maxe = Integer.MIN_VALUE; //max element
int len = 0 ;
for(int j = i ; j < Math.min(n , i+k) ; j++){
len++;
maxe = Math.max(maxe , arr[j]);
int sum = len*maxe + dp[j+1];
max = Math.max(sum ,max);
}
dp[i] = max;
}
return dp[0];
}
//REcursion k^n memo n*k | sc- n(dp array) + n(stack height)
public int solve(int[] arr , int i , int k ,Integer[] dp){
int n = arr.length;
if(i == n) return 0;
if(dp[i] != null)
return dp[i];
int max = (int)-1e9;
int maxe = Integer.MIN_VALUE; //max element
int len = 0 ;
for(int j = i ; j < Math.min(n , i+k) ; j++){
len++;
maxe = Math.max(maxe , arr[j]);
int sum = len*maxe + solve(arr , j+1 ,k , dp);
max = Math.max(sum ,max);
}
return dp[i] = max;
}
}
content_copyCOPY
https://leetcode.com/problems/partition-array-for-maximum-sum/
Comments