Найдите сумму абсолютной разницы ⇐ JAVA
-
Гость
Найдите сумму абсолютной разницы
Дан массив целых чисел A и B. Для каждого элемента в B найдите сумму абсолютной разницы с элементами A и постройте массив результатов.
Пример:
A = [1,2,3] Б = [3,2,1,5] **Результат = ** [3,2,3,9]
Объяснение:
Для i=0 Б[0] = 3 сумма абсолютной разницы с A равна (3-1) + (3-2) + (3-3) = (2+1+0) = 3. Для я=1 Б[1] = 2 сумма абсолютной разницы с A равна (2-1) + (2-2) + (2-3) = (1+0+1) = 2. Для я=2 Б[2] = 1 сумма абсолютной разницы с A равна (1-1) + (1-2) + (1-3) = (0+1+2) = 3. Для я=3 Б[3] = 5 сумма абсолютной разницы с A равна (5-1) + (5-2) + (5-3) = (4+3+2) = 9. Итак, результат = [3,2,3,9] Вот мой код: Я использовал хэш-карту, чтобы избежать повторного расчета значений, если они уже рассчитаны.
static Listsolve(int[] A, int[] B) { Результат List = новый ArrayList(); Map map = new HashMap(); for(int b: B) { длинная сумма = 0; if(map.get(b) != null) { result.add(map.get(b)); } еще { for(int a : A) { сумма += Math.abs(b - a); } map.put(б, сумма); результат.добавить(сумма); } } вернуть результат; } Сложность моего кода равна O(m*n), где m — размер массива A, а n — размер массива B.
Как сократить временную сложность моего кода.
Дан массив целых чисел A и B. Для каждого элемента в B найдите сумму абсолютной разницы с элементами A и постройте массив результатов.
Пример:
A = [1,2,3] Б = [3,2,1,5] **Результат = ** [3,2,3,9]
Объяснение:
Для i=0 Б[0] = 3 сумма абсолютной разницы с A равна (3-1) + (3-2) + (3-3) = (2+1+0) = 3. Для я=1 Б[1] = 2 сумма абсолютной разницы с A равна (2-1) + (2-2) + (2-3) = (1+0+1) = 2. Для я=2 Б[2] = 1 сумма абсолютной разницы с A равна (1-1) + (1-2) + (1-3) = (0+1+2) = 3. Для я=3 Б[3] = 5 сумма абсолютной разницы с A равна (5-1) + (5-2) + (5-3) = (4+3+2) = 9. Итак, результат = [3,2,3,9] Вот мой код: Я использовал хэш-карту, чтобы избежать повторного расчета значений, если они уже рассчитаны.
static Listsolve(int[] A, int[] B) { Результат List = новый ArrayList(); Map map = new HashMap(); for(int b: B) { длинная сумма = 0; if(map.get(b) != null) { result.add(map.get(b)); } еще { for(int a : A) { сумма += Math.abs(b - a); } map.put(б, сумма); результат.добавить(сумма); } } вернуть результат; } Сложность моего кода равна O(m*n), где m — размер массива A, а n — размер массива B.
Как сократить временную сложность моего кода.
Мобильная версия