Minimum Operations to Reduce X to Zero

buggy
 avatar
unknown
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...