#
# Goal:
# -----
# Find the minimal value of (a[i] + a[j]) for any two distinct elements in an array.
#
# Efficient Strategy (O(n)):
# --------------------------
# The smallest possible sum of two distinct elements is obtained by:
# - finding the smallest element
# - finding the second smallest element
# Because any other pair must be >= one of these two.
#
# We scan the array once, keeping track of:
# - min1 = smallest element seen so far
# - min2 = second smallest element seen so far
#
# A function that computes the minimal sum of two distinct elements.
def minimal_two_sum(arr)
# Handle edge case: need at least two elements
if arr.length < 2
raise ArgumentError, "Array must contain at least two elements."
end
# Initialize min1 and min2 to very large values
min1 = Float::INFINITY
min2 = Float::INFINITY
# Single pass through the array
arr.each do |x|
if x < min1
# x becomes the new smallest; old min1 becomes min2
min2 = min1
min1 = x
elsif x < min2
# x is not the smallest, but smaller than the second smallest
min2 = x
end
end
# The minimal sum of two distinct elements
min1 + min2
end
arr = [7, -3, 10, 1, 5, 2, 4]
begin
result = minimal_two_sum(arr)
puts "Minimal sum of two elements: #{result}"
rescue => e
puts "Error: #{e.message}"
end
#
# run:
#
# Minimal sum of two elements: -2
#