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.
Follow-up: Can you do this in O(N) time and constant space?
Solution
public Integer sumLargestNonAdjacentNumbers(List<Integer> lstNumbers){ Integer exclusive = 0; Integer inclusive = lstNumbers.get(0); for (Integer i = 1; i < lstNumbers.size(); i++) { Integer temp = inclusive; inclusive = Math.max(exclusive + lstNumbers.get(i), inclusive); exclusive = temp; } return inclusive; }
Testing
System.debug(sumLargestNonAdjacentNumbers(new List<Integer>{5, 1, 1, 5})); //10 System.debug(sumLargestNonAdjacentNumbers(new List<Integer>{2, 4, 6, 2, 5})); //13
Complexity Analysis
Time complexity: O(n)
Space complexity: O(1)