Minimum Operations to Reduce X to Zero
buggyunknown
c_cpp
3 years ago
980 B
11
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...