Пусть A — непустой массив, состоящий из N целых чисел.
Абс-сумма двух для пары индексов (P, Q) представляет собой абсолютное значение |A[P] + A[Q]|, для 0 ≤ P ≤ Q < N.
Например, следующий массив A:
A[0] = 1 A1 = 4 A[2] = -3 имеет пары индексов (0, 0), (0,
1), (0, 2), (1, 1), (1, 2), (2, 2). Абс-сумма двух для пары
(0, 0) равна A[0] + A[0] = |1 + 1| = 2. Абс-сумма двух для пары
(0, 1) равна A[0] + A1 = |1 + 4| = 5. Абс-сумма двух для пары
(0, 2) равна A[0] + A[2] = |1 + (−3)| = 2. Абс сумма двух для
пары (1, 1) равна A1 + A1 = |4 + 4| = 8. Абс сумма двух для
пары (1, 2) равна A1 + A[2] = |4 + (−3)| = 1. Абс-сумма двух для
пары (2, 2) равна A[2] + A[2] = |(−3) + (−3)| = 6.`
Напишите функцию:
Код: Выделить всё
class Solution { public int solution(int[] A); }
Например, для следующего массива A:
A[0] = 1 A1 = 4 A[2] = -3 функция должна возвращать 1, как объяснено
выше.
Данный массив A:
A[0] = -8 A1 = 4 A[2] = 5 A[3] = -10 A[4] = 3 функция
должна вернуть |(−8) + 5| = 3.
Напишите эффективный алгоритм для следующих предположений:
N — целое число в диапазоне [1..100 000]; каждый элемент массива A представляет собой целое число в диапазоне [-1 000 000 000..1 000 000 000].
Я пишу решение, представленное ниже.
Код: Выделить всё
public static int solution(int[] A) {
int N = A.length;
Arrays.sort(A);
if (A[0] >= 0) {
return 2 * A[0];
}
int i = 0;
int j = N - 1;
int sum = Math.abs((A[i] + A[j]));
// -10, -8, 3, 4, 5
while (i
Подробнее здесь: [url]https://stackoverflow.com/questions/57766659/find-the-minimal-absolute-value-of-a-sum-of-two-elements[/url]
Мобильная версия