🎉 One-stop destination for all your technical interview Preparation 🎉
You are given two integer arrays nums and multipliers of size n and m respectively, where n >= m. The arrays are 1-indexed.
You begin with a score of 0. You want to perform exactly m operations. On the ith operation (1-indexed), you will:
Return the maximum score after performing m operations.
class Solution {
private:
int helper(vector<int>& nums, vector<int>& multipliers, int i, int l)
{
int n = nums.size();
int m = multipliers.size();
if (i == m) return 0;
int pickLeft = (multipliers[i] * nums[l]) + (helper(nums, multipliers, i + 1, l + 1));
int pickRight = (multipliers[i] * nums[n - (i - l) - 1]) + (helper(nums, multipliers, i + 1, l));
return max(pickLeft, pickRight);
}
public:
int maximumScore(vector<int>& nums, vector<int>& multipliers)
{
return helper(nums, multipliers, 0, 0);
}
};
m<=10^3
class Solution {
private:
int helper(vector<int>& nums, vector<int>& multipliers, vector<vector<int>>& memo, int i, int l)
{
int n = nums.size();
int m = multipliers.size();
if (i == m) return 0;
if(memo[l][i] != -1) return memo[l][i];
int pickLeft = (multipliers[i] * nums[l]) + (helper(nums, multipliers, memo, i + 1, l + 1));
int pickRight = (multipliers[i] * nums[n - (i - l) - 1]) + (helper(nums, multipliers, memo, i + 1, l));
return memo[l][i] = max(pickLeft, pickRight);
}
public:
int maximumScore(vector<int>& nums, vector<int>& multipliers)
{
int m = multipliers.size();
vector<vector<int>> memo(m,vector<int>(m,-1)); // size is M x M not N x N
return helper(nums, multipliers, memo, 0, 0);
}
};
m<=10^3
class Solution {
public:
int maximumScore(vector<int>& nums, vector<int>& multipliers)
{
int n = nums.size();
int m = multipliers.size();
int dp[1001][1001] = {};
for (int i = m - 1; i >= 0; i--) {
int mult = multipliers[i];
for (int left = i; left >= 0; left--) {
int right = n - 1 - (i - left);
int pickLeft = mult * nums[left] + dp[i + 1][left + 1];
int pickRight = mult * nums[right] + dp[i + 1][left];
dp[i][left] = max(pickLeft, pickRight);
}
}
return dp[0][0];
}
};