Как уменьшить время выполнения программы java

раньше использовал 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 — это позволит сэкономить вам время на разнообразные проверки, а также избавит от многих ошибок.

Читайте также:
Как скачивать программы на Смарт телевизоре

Screenshot_1-1801-89d853.png

Создаем объекты лишь тогда, когда нужно

Пожалуй, создание объектов является одной из наиболее затратных операций в Java. Хорошая практика — создавать их лишь тогда, когда они действительно необходимы.

Screenshot_2-1801-57dc65.png

Deadlocks

Взаимная блокировка потоков (дэдлок) бывает по множеству причин, а полностью уберечься от них в Java 8 весьма сложно. Зачастую, такое происходит, если один синхронизируемый объект ожидает ресурсов, а они заблокированы другим синхронизированным объектом.

Рассмотрим пример тупика потока:

Screenshot_3-1801-45503e.png

Результат программы будет следующим:

Screenshot_4-1801-3e11a6.png

Если изменить порядок вызова потоков, то взаимоблокировок можно избежать:

Screenshot_5-1801-48da36.png

Screenshot_6-1801-6d6bd0.png

Резервирование памяти

Ряд Java-приложений обладает повышенной ресурсоемкостью, что может приводить к замедленной работе. Чтобы повысить производительность, можно выделить на Java-машине больше оперативной памяти.

Screenshot_7.1-1801-3b3563.png

Здесь: • Xms — минимальный пул выделения памяти; • Xmx — максимальный пул; • XX: PermSize — начальный размер, который выделится при запуске JVM; • XX: MaxPermSize — максимальный размер, который выделится при запуске JVM.

Источник: otus.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru