public static void Main()
Console.WriteLine(GetClosestPoints([1, 2, 5]));
Console.WriteLine(GetClosestPoints([1, 2, 3]));
Console.WriteLine(GetClosestPoints([1, 2, 3, 5, 6, 7, 8]));
Console.WriteLine(GetClosestPoints([1, 2, 0, 1]));
Console.WriteLine(GetClosestPoints([2, 0, 1]));
Console.WriteLine(GetClosestPoints([0, 1, 2, -1]));
Console.WriteLine(GetClosestPoints([-1, -2, 0]));
Console.WriteLine(GetClosestPoints([-1, -2, 0, 1, 2]));
Console.WriteLine(GetClosestPoints([100, 120, 140, 115]));
Console.WriteLine(GetClosestPoints([2147483647, 2147483647, 1000, 1001]));
Console.WriteLine(GetClosestPoints([2147483646, 2147483647, 1000, 1001]));
Console.WriteLine(GetClosestPoints([]));
Console.WriteLine(GetClosestPoints([4,3,2,1]));
public static ClosestPoints? GetClosestPoints(int[] points)
int minDistance = int.MaxValue;
if (points != null && points.Length > 0)
for (int i = 0; i < points.Length; i++)
for (int j = i + 1; j < points.Length; j++)
int distance = Math.Abs(points[i] - points[j]);
if (distance < minDistance ||
(distance == minDistance && (j > num2Idx || (j == num2Idx && i > num1Idx))))
return new ClosestPoints(points[num1Idx], points[num2Idx]);
public class ClosestPoints
public ClosestPoints() { }
public ClosestPoints(int p1, int p2)
public int P1 { get; set; }
public int P2 { get; set; }
public override string ToString()