Minimum Operations to Reduce X to Zero
buggyunknown
c_cpp
3 years ago
980 B
14
Indexable
class Solution {
public:
int recur(vector<int>& nums, int f, int r, int target, vector<vector<int>>& dp){
if(f>r){
return -1;
}
if(target<0){
return dp[f][r]=-1;
}else if(target==0){
return dp[f][r]=0;
}
if(dp[f][r]!=-2){
return dp[f][r];
}
int front=recur(nums,f+1,r,target-nums[f],dp);
int rear=recur(nums,f,r-1,target-nums[r],dp);
int result;
if(front==-1&&rear==-1){
result=-1;
}else if(front==-1||rear==-1){
result=front==-1 ? 1+rear:1+front;
}else{
result=min(1+front,1+rear);
}
return dp[f][r]=result;
}
int minOperations(vector<int>& nums, int x) {
int num_len=nums.size();
if(num_len==0){
return x==0? 0:-1;
}
vector<vector<int>> dp(num_len,vector<int>(num_len,-2));
return recur(nums,0,num_len-1,x,dp);
}
};
Editor is loading...