раньше использовал int вместо byte, но не помогло. Как можно уменьшить время выполнения? Сама задача:
Задано целое число s и два диапазона целых чисел от l1 до r1, и l2 до r2. Вам необходимо найти два целых числа x1, x2 или определить, что таких чисел не существует, для которых выполнено x1 + x2 = s. x1 из 1 промежутка. x2 — из второго.
Отслеживать
25.1k 7 7 золотых знаков 30 30 серебряных знаков 46 46 бронзовых знаков
задан 19 янв 2019 в 12:47
michael_best michael_best
1,531 1 1 золотой знак 9 9 серебряных знаков 22 22 бронзовых знака
19 янв 2019 в 13:00
19 янв 2019 в 13:09
Важен не язык, а то что вы используете O(n^2) алгоритм, а в задаче подразумевается O(nlogn) или O(n). Вот ещё похожий вопрос ru.stackoverflow.com/q/460433/317064
19 янв 2019 в 13:19
19 янв 2019 в 13:35
Сложность алгоритма не зависит от языка программирования. Ваш текущий алгоритм имеет сложность O(n^2), где n=max(r1-l1+1,r2-l2+1), потому что на каждой итерации внешнего цикла вы делаете ещё r2-l2+1 итераций. Существуют алгоритмы со сложностью O(nlogn) и O(n), которые я привёл по ссылкам. Если вы получаете TLE на Java, то для эквивалентного кода на Python почти наверное тоже его получите, потому что сложность алгоритмов одинаковая. Авторы тестов специально подбирают такие входные данные.
КАК ИЗМЕРИТЬ ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ, КОДА, МЕТОДА, ФУНКЦИИ, ЗАПРОСА | C# STOPWATCH | C# ПЛЮШКИ
Источник: ru.stackoverflow.com
Уменьшить время выполнения этой Java-программы
Я создал программу для ввода массива и нашел произведение трех самых больших чисел массива, таких что:
Массив состоит из подмассивов, состоящих из индекса, увеличенного по одному за раз.
То есть для массива из 10 элементов найдите произведение, учитывая первые 3 элемента, затем первые 4 элемента, затем первые 5 элементов и так далее.
import java.io.*; import java.util.Arrays; public class monkmulti < public static void main(String args[] ) throws IOException < BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); // no. of elements String xs = br.readLine(); //accepting those elements in a string xs=xs+» «; if(n<1||n>100000) //constraint System.exit(0); int i,temp,count=0; for(i=0;i > if(count!=n) //checks if no. of elements are equal to n System.exit(0); int[] x=new int[count]; int k=0; temp=0; for(i=0;i > count=0; int len=x.length,j; int[] x1=new int[len]; System.arraycopy(x, 0, x1, 0, len); for(i=0;i100000) //constraint for each element System.exit(0); > int m1=0,m2=0,m3=0; int max1=x[0],max2=x[0],max3=x[0]; /*code to be improved below from here*/ for(i=2;ix1[k+1]) < temp=x1[k]; x1[k]=x1[k+1]; x1[k+1]=temp; >> > System.out.println(x1[i]*x1[i-1]*x1[i-2]); > > >
Входные данные :
Расчёт времени выполнения программы на python #short
n = пользовательские входы нет. элементов в массиве
xs= строка, принимающая n элементов, разделенных пробелом
Выход:
товар с учетом первых 3 элементов
товар с учетом первых 4 элементов
скоро..
Пример:
Входные данные :
5
6 2 9 3 8
Выход:
-1
-1
108
162
432
Пояснение Есть 5 целых чисел 6,2,9,3,8
Для третьего индекса верхние 3 числа — это 6,2 и 9, произведение которых равно 108.
Для четвертого индекса верхние 3 числа — это 6,9 и 3, произведение которых равно 162.
Для пятого индекса верхние 3 числа — это 6,9 и 8, произведение которых равно 432.
Источник: stackru.com
Повышаем производительность в Java
Если программа, которую вы пишете, может вернуть коллекцию, не содержащую никаких значений, следует удостовериться, что возвращается пустая коллекция, а не Null — это позволит сэкономить вам время на разнообразные проверки, а также избавит от многих ошибок.
Создаем объекты лишь тогда, когда нужно
Пожалуй, создание объектов является одной из наиболее затратных операций в Java. Хорошая практика — создавать их лишь тогда, когда они действительно необходимы.
Deadlocks
Взаимная блокировка потоков (дэдлок) бывает по множеству причин, а полностью уберечься от них в Java 8 весьма сложно. Зачастую, такое происходит, если один синхронизируемый объект ожидает ресурсов, а они заблокированы другим синхронизированным объектом.
Рассмотрим пример тупика потока:
Результат программы будет следующим:
Если изменить порядок вызова потоков, то взаимоблокировок можно избежать:
Резервирование памяти
Ряд Java-приложений обладает повышенной ресурсоемкостью, что может приводить к замедленной работе. Чтобы повысить производительность, можно выделить на Java-машине больше оперативной памяти.
Здесь: • Xms — минимальный пул выделения памяти; • Xmx — максимальный пул; • XX: PermSize — начальный размер, который выделится при запуске JVM; • XX: MaxPermSize — максимальный размер, который выделится при запуске JVM.
Источник: otus.ru