Link: https://leetcode.com/discuss/interview-question/4997933/Amazon-OA Solution: Topics: heap Intuition See code comments. Quite a tricky heap problem. Implementation import heapq def most_negatives(pl): curr_sum = pl[0] # the first element can never be negative, # so we always take it max_heap = [] for i in range(1, len(pl)): curr_sum -= pl[i] # try to make every element negative heapq.heappush(max_heap, -pl[i]) # push it to the max heap... # this represents the elements # we have made negative while curr_sum < 0: curr_sum += -(heapq.heappop(max_heap)*2) # while the cumulative sum is negative, pop off the max heap # and add it back to the cumulative sum. # (x2 because we subtracted it earlier) # I hope it is clear why a max heap is used... # when curr_sum drops into negatives, we want to add back the # largest values first to get our curr_sum back to positive as # quickly as possible. # this ensures that our heap can grow as large as possible # (remember, the heap represents the elements that have been # made negative) return len(max_heap) #time: o(nlogn) #memory: o(n) review OA hard