Обновите массив несколько раз за меньшее время ⇐ JAVA
-
Anonymous
Обновите массив несколько раз за меньшее время
Мне нужно выполнить несколько обновлений моего массива на основе предоставленных команд. Я хочу уменьшить временную сложность этого процесса.
У меня есть массив целых чисел A и еще один двумерный список, представляющий команды
Формат команды такой:
[*][1, p, q], если это тип 1, выберите элемент с индексом p в массиве A и установите для него значение q [*][2, -1, r], если это тип 2, то найдите все элементы в массиве A, которые меньше r, и обновите их до r, значение -1 не имеет значения. , мы можем это игнорировать.
Пример:
A = [2,4,1,4] команды = {[1,1,30], [1,2,4], [2,-1,10]}; Результат = [10,30,10,10] Объяснение: команда1 = [1,1,30] , A = [2,4,1,4] меняется на [2,30,1,4] команда2 = [1,2,4] , A = [2,30,1,4] меняется на [2,30,4,4] команда3 = [2,-1,10], A = [2,30,4,4] меняется на [10,30,10,10] поэтому результат [10,30,10,10] Вот мой код:
public static int[]solve(int n, int[] A, int[][] команды) { for (int[] команда: команды) { если (команда[0] == 1) { int p = команда [1]; int q = команда [2]; А[р] = q; } иначе если (команда[0] == 2) { int r = команда[2]; for (int i = 0; i < n; i++) { если (A < r) { А[я] = г; } } } } вернуть А; } Размер моего массива — до 10^5, а команд — до 10^9.
Как сократить временные затраты на это. Используя for (int i = 0; i < n; i++) внутри else, если условие занимает много времени, я хочу сократить это время.
Мне нужно выполнить несколько обновлений моего массива на основе предоставленных команд. Я хочу уменьшить временную сложность этого процесса.
У меня есть массив целых чисел A и еще один двумерный список, представляющий команды
Формат команды такой:
[*][1, p, q], если это тип 1, выберите элемент с индексом p в массиве A и установите для него значение q [*][2, -1, r], если это тип 2, то найдите все элементы в массиве A, которые меньше r, и обновите их до r, значение -1 не имеет значения. , мы можем это игнорировать.
Пример:
A = [2,4,1,4] команды = {[1,1,30], [1,2,4], [2,-1,10]}; Результат = [10,30,10,10] Объяснение: команда1 = [1,1,30] , A = [2,4,1,4] меняется на [2,30,1,4] команда2 = [1,2,4] , A = [2,30,1,4] меняется на [2,30,4,4] команда3 = [2,-1,10], A = [2,30,4,4] меняется на [10,30,10,10] поэтому результат [10,30,10,10] Вот мой код:
public static int[]solve(int n, int[] A, int[][] команды) { for (int[] команда: команды) { если (команда[0] == 1) { int p = команда [1]; int q = команда [2]; А[р] = q; } иначе если (команда[0] == 2) { int r = команда[2]; for (int i = 0; i < n; i++) { если (A < r) { А[я] = г; } } } } вернуть А; } Размер моего массива — до 10^5, а команд — до 10^9.
Как сократить временные затраты на это. Используя for (int i = 0; i < n; i++) внутри else, если условие занимает много времени, я хочу сократить это время.
Мобильная версия