input: Write a function to improve the time complexity of the given function `find_max_sum(arr)`. The original function finds the maximum sum of any two distinct elements in the array. The improved function should achieve this in a more efficient manner.
  
  ### Input:
  def find_max_sum(arr):
      max_sum = 0
      for i in range(len(arr)):
          for j in range(i+1, len(arr)): 
              max_sum = max(max_sum, arr[i] + arr[j])
      return max_sum
  
  ### Output:
  def find_max_sum(arr):
      max_sum = 0
      left = 0
      right = len(arr) - 1
      while left < right:
          if arr[left] + arr[right] > max_sum:
              max_sum = arr[left] + arr[right]
          if arr[left] > arr[right]:
              right -= 1
          else:
              left += 1
      return max_sum
  
  assert find_max_sum([3, 4, 5, 1, 2])==9
  assert find_max_sum([3, 5, 10, 1, 2])==15
  assert find_max_sum([4, 3, 1, 2])==7
  assert find_max_sum([3, 5, 4, 1, 2])==8
  assert find_max_sum([])==0
output: def find_max_sum(arr):
      if len(arr) < 2:
          return 0
      first_max = max(arr[0], arr[1])
      second_max = min(arr[0], arr[1])
      for num in arr[2:]:
          if num > first_max:
              second_max = first_max
              first_max = num
          elif num > second_max:
              second_max = num
      return first_max + second_max