Учитывая массив из n целых чисел, переставьте их так, чтобы сумма абсолютных разностей всех элементов была минимизирована, а затем вычислите сумму этих различий.
Пример использования: n = 5, arr = [5,1,3,7,3]
O / P: 6
Мой код:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class GFG {
private static int MinAbsDifferences(List<Integer> arr)
{
Collections.sort(arr);
int n = arr.size();
int diff = 0;
diff += Math.abs(arr.get(0) - arr.get(1));
diff += Math.abs(arr.get(n - 1) - arr.get(n - 2));
for (int i = 1; i < n - 1; i++)
diff += Math.min(Math.abs(arr.get(i) - arr.get(i - 1)),
Math.abs(arr.get(i) - arr.get(i + 1)));
return diff;
}
public static void main(String args[])
{
List<Integer> arr = new ArrayList<>();
arr.add(5);
arr.add(1);
arr.add(3);
arr.add(7);
arr.add(3);
System.out.println( "Diff = "
+ MinAbsDifferences(arr));
}
}
Однако я считаю, что это не оптимально, хотя первоначальная система получила выговор
I/P : 2,3,2
O/P : 1
Однако , это привело к 2. Когда я запустил dry, я думаю, что все тестовые примеры с моей стороны были правильными, и приведенное выше должно привести к 1, не понимаю, почему они получили как 2
.
Что может ошиблись там с моим кодом?