title: how to improve computation speed when finding max in a large list? excluding Numpy
body: <p>consider a game with an array(=num) containing some integers. I can take any integer and remove it from the array and add half of that number (rounded up) back to the array.i can do it for a fixed number of moves(=k).
  the challenge is to minimize the sum of the final array.</p>
  
  <p>my problem is that the test cases fail when dealing with large arrays :( </p>
  
  <p>what is the efficient computation way to overcome this?</p>
  
  <p>my first step for the challenge is taking max(num) and replace it with the result of ceil(max(num)/2) for k times.
  another option is using sort(reverse) in every loop and replace the last value.
  I've played with different sorting algos, read here and try bisect module they are all very new to me and didn't overcome the test-cases threshold, so i hope someone here can provide a helping hand for a newbie.</p>
  
  <pre><code>def minSum(num, k):
      for i in range(k):
          num.sort(reverse=True)
          num.insert(0, math.ceil(num[0] / 2))
          num.remove(num[1])
      return sum(num)
  
  
  minSum([10,20,7],4)
  &gt;&gt;&gt; 14
  </code></pre>