From 8fccb6936bfafa3c2a70b2d700581aff9bbf1c3f Mon Sep 17 00:00:00 2001 From: Nandan Satheesh Date: Wed, 9 Jan 2019 14:45:26 +0530 Subject: [PATCH 1/3] Solved #9 --- challenges/largest-non-adjacent-sum.py | 47 ++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 challenges/largest-non-adjacent-sum.py diff --git a/challenges/largest-non-adjacent-sum.py b/challenges/largest-non-adjacent-sum.py new file mode 100644 index 0000000..145ef5d --- /dev/null +++ b/challenges/largest-non-adjacent-sum.py @@ -0,0 +1,47 @@ +# +# +# This problem was asked by Airbnb. +# +# Given a list of integers, +# write a function that +# returns the largest sum of non-adjacent numbers. +# Numbers can be 0 or negative. + +# For example, +# [2, 4, 6, 2, 5] should return 13, +# since we pick 2, 6, and 5. +# [5, 1, 1, 5] should return 10, +# since we pick 5 and 5. +# +# + +import math + +def maximumNonAdjacentSum(array): + + DP = [0]*len(array) + + DP[0] = array[0] + DP[1] = max(array[0] , array[1]) + + for i in range(2,len(array)): + + DP[i] = max3( array[i] , array[i] + DP[i-2] , DP[i-1]) + print(DP) + + + + + return DP[len(array) - 1] + +maximumNonAdjacentSum([2,4,6,2,5]) + +# Outputs +# [2, 4, 8, 0, 0] +# [2, 4, 8, 8, 0] +# [2, 4, 8, 8, 13] + +print(maximumNonAdjacentSum([5,1,1,5])) +# [5, 5, 6, 0] +# [5, 5, 6, 10] +# 10 From 5f3114d39d61855fc6d94f5dca8923cb82b9f8bc Mon Sep 17 00:00:00 2001 From: Nandan Satheesh Date: Wed, 9 Jan 2019 14:46:24 +0530 Subject: [PATCH 2/3] Update index.md --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 716de78..cb31a4e 100644 --- a/index.md +++ b/index.md @@ -10,7 +10,7 @@ 6. [XOR Linked List](./challenges/xor-linked-list.py) 7. [Decode Ways](./challenges/decode-ways.py) 8. [Count Unival Subtrees](./challenges/count-unival-subtrees.py) -9. Largest Non-adjacent Sum +9. [Largest Non-adjacent Sum](./challenges/largest-non-adjacent-sum.py) 10. Job Scheduler * [Golang](./challenges/job-scheduler.go) * [Python](./challenges/job-scheduler.py) @@ -68,4 +68,4 @@ 2. [Count Nodes in Binary Tree](./lessons/count-nodes-in-binary-tree.py) 3. [Deepest Node in Binary Tree](./lessons/deepest-node-in-binary-tree.py) 4. [N Queens Puzzle](./lessons/n-queens-puzzle.py) -5. [Flight Itinerary Problem](./lessons/flight-itinerary-problem.py) \ No newline at end of file +5. [Flight Itinerary Problem](./lessons/flight-itinerary-problem.py) From b771eccd9e842d3358c32054231a99c50dfc63d5 Mon Sep 17 00:00:00 2001 From: Nandan Satheesh Date: Tue, 1 Oct 2019 17:08:43 +0530 Subject: [PATCH 3/3] Major Changes --- challenges/largest-non-adjacent-sum.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/challenges/largest-non-adjacent-sum.py b/challenges/largest-non-adjacent-sum.py index 145ef5d..d187676 100644 --- a/challenges/largest-non-adjacent-sum.py +++ b/challenges/largest-non-adjacent-sum.py @@ -19,27 +19,35 @@ def maximumNonAdjacentSum(array): - DP = [0]*len(array) + if (len(array) == 1): + return array[0] + + if (len(array) == 2): + return max(array[0] , array[1]) + DP = [0]*len(array) DP[0] = array[0] DP[1] = max(array[0] , array[1]) for i in range(2,len(array)): - DP[i] = max3( array[i] , array[i] + DP[i-2] , DP[i-1]) + DP[i] = max( array[i] , array[i] + DP[i-2] , DP[i-1]) print(DP) - - - - + return DP[len(array) - 1] -maximumNonAdjacentSum([2,4,6,2,5]) +# Outputs +maximumNonAdjacentSum([2]) +# 2 + +maximumNonAdjacentSum([2,3]) +# 3 -# Outputs +print(maximumNonAdjacentSum([2,4,6,2,5])) # [2, 4, 8, 0, 0] # [2, 4, 8, 8, 0] # [2, 4, 8, 8, 13] +# 13 print(maximumNonAdjacentSum([5,1,1,5])) # [5, 5, 6, 0]