Daily Coding Problem: Problem #9 [Hard]- Sum of Adjacent Numbers

Good morning! Here’s your coding interview problem for today.

This problem was asked about 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.

Follow-up: Can you do this in O(N) time and constant space?

Suggested Solution:

Let us figure out what non-adjacent numbers are, because, am neither a genius, english nor maths major. So according to Merriam webster :

What is non-adjacent? : not adjacent: such as. a: not having a common endpoint or border nonadjacent buildings/rooms. b of two angles: not having the vertex and one side in common.

So, in simpler terms, there must be a number in between to make two numbers adjacent to each others.

code:

def adjacent_sum(arr):    sum = 0    if len(arr) < 0 or len(arr) == 2:        return 0    elif len(arr) == 1:        return arr[0]    else:        if len(arr) % 2 == 0:            for i in range(0, len(arr), 3):            sum += arr[i]        else:            for i in range(0, len(arr), 2):            sum += arr[i]        return sum# print(adjacent_sum([2, 4, 6, 2, 5]))print(adjacent_sum([5, 1, 1, 5, 2, 4, 6, 2, 5]))

The time complexity for this solution is 0(n)

An alternative solution has been written here in Java: https://divyabiyani.medium.com/daily-coding-problem-february-24th-2020-given-a-list-of-integers-write-a-function-that-89b68076b0fb

I am a passionate Python Engineer and DevOps. Besides the technology, I also do charity work with my NGO at www.feedsomeone.org