Maximum Sum of Non-Adjacent Elements

Problem Link: https://www.codingninjas.com/codestudio/problems/maximum-sum-of-non-adjacent-elements_843261?leftPanelTab=0

Recursion + Memoization

def maximumNonAdjacentSum(nums,size):    
    # Write your code here.
    def fun(nums,n,i):
        
        # dp[i] indicates the max sum
        # of non-adj elements from ith index
        # to (n-1)th index
        if(i==n-1):
            dp[i]=nums[n-1]
            return dp[i]
        elif(i==n-2):
            dp[i]=max(nums[i],nums[i+1])
            return dp[i]
        elif(i>=n):
            return 0
        
        if(dp[i+2]==-1):
            dp[i+2]=fun(nums,n,i+2)
        if(dp[i+1]==-1):
            dp[i+1]=fun(nums,n,i+1)
        inc=nums[i]+dp[i+2]
        exc=dp[i+1]
        dp[i]=max(inc,exc)
        return dp[i]
      
    i=0
    dp=[-1]*(size)
    return fun(nums,size,i)

Tabulation

def maximumNonAdjacentSum(nums,size):    
    # Write your code here.
    def fun(nums,n,i):
        n=size
        dp=[0]*(n)
        dp[0]=nums[0]
        if(n==1):
            return dp[0]
        dp[1]=max(nums[0],nums[1])
        if(n==2):
            return dp[1]
        for i in range(2,n):
            inc=nums[i]+dp[i-2]
            exc=dp[i-1]
            dp[i]=max(inc,exc)
        return dp[n-1]

Last updated