int n = in.nextInt();
int[] a = new int[n];
a[0] = in.nextInt();
int min = a[0];
int minS = min;
for (int i = 1; i < n; i++) {
a[i] = in.nextInt();
if (a[i] < min) min = a[i];
}
for (int i = 1; i < n; i++) {
if (a[i] < minS && a[i] != min) minS = a[i];
}
System.out.println(min + " " + minS);
На всякий случай объясню еще так.
Изначально двум минимумам мы присваиваем значение первого элемента.
В первом цикле ты ищешь первый минимум, тут всё понятно: со второго элемента массива, если элемент меньше минимума, то минимуму присваиваем значение элемента.
Во втором цикле мы ищем второй минимум: всё то же самое, только добавляется ещё одно условие: элемент должен быть не равен первому минимуму.
Вот, впринципе, и всё