Efficiently get sorted sums of a sorted list

后端 未结 8 2169
小蘑菇
小蘑菇 2021-02-18 16:50

You have an ascending list of numbers, what is the most efficient algorithm you can think of to get the ascending list of sums of every two numbers in that list. Duplicates in

8条回答
  •  攒了一身酷
    2021-02-18 17:22

    Rather than coding this out, I figure I'll pseudo-code it in steps and explain my logic, so that better programmers can poke holes in my logic if necessary.

    On the first step we start out with a list of numbers length n. For each number we need to create a list of length n-1 becuase we aren't adding a number to itself. By the end we have a list of about n sorted lists that was generated in O(n^2) time.

    step 1 (startinglist) 
    for each number num1 in startinglist
       for each number num2 in startinglist
          add num1 plus num2 into templist
       add templist to sumlist
    return sumlist 
    

    In step 2 because the lists were sorted by design (add a number to each element in a sorted list and the list will still be sorted) we can simply do a mergesort by merging each list together rather than mergesorting the whole lot. In the end this should take O(n^2) time.

    step 2 (sumlist) 
    create an empty list mergedlist
    for each list templist in sumlist
       set mergelist equal to: merge(mergedlist,templist)
    return mergedlist
    

    The merge method would be then the normal merge step with a check to make sure that there are no duplicate sums. I won't write this out because anyone can look up mergesort.

    So there's my solution. The entire algorithm is O(n^2) time. Feel free to point out any mistakes or improvements.

提交回复
热议问题