Вот мое представление о этой проблеме с субботнего конкурса LeetCode (31 мая 2025 г.) https://leetcode.com/problems/minimum-m ... scription/:
https://leetcode.com/problems/minimum-m ... 651239748/
Я собираюсь вставить код внизу, в случае, если у вас нет доступа к нему. Выше. < /p>
Метод getfinalbitset считывает небольшой струнный массив один раз, и он находит все символы 'l' и добавляет их в хэшмату. Этот метод занимает 24% времени исполнения, согласно пироскопе/асинхровым Java Profiler. Основной метод вызывает Minmoves 600 раз и заканчивается в течение 35 секунд. GetFinalBitset занимает 8 секунд. Это делает незначительные вычисления. Он только один раз называется методом minmoves ()
Метод GetFinalBitset работает очень быстро, когда я удаляю minMoves () и вызову getFinalBitset () непосредственно из основного: 600 тыс. Производствует в течение секунды, до того, как профильер может измерить его. строка, он работает быстро (и дает неправильный ответ).
Вот график профилировщика:
https://paste.pics/f6e677756101aefde764362280b42423. называется неоднократно. GetFinalBitset называется только один раз, в сетке 20x20. ClassPath
[*] Загрузить и запустить пироскоп:
[*] Brew установить пироскоп-IO/Brew/Pyroscope
[*] Brew Services Начните пироскоп
Запустите код ниже и перейти к Localhost: 4040 в вашем Browser.import io.pyroscope.http.Format;
import java.util.*;
import io.pyroscope.javaagent.EventType;
import io.pyroscope.javaagent.PyroscopeAgent;
import io.pyroscope.javaagent.config.Config;
import io.pyroscope.javaagent.api.Logger;
import io.pyroscope.javaagent.impl.DefaultLogger;
class Solution {
static int eFull;
record State(int r, int c, int bitmask, int e, int steps) {
List getNextStates(Map lIndex, String[] classroom) {
// e is energy after visiting the current cell and consuming the R there
List next = new ArrayList(4);
if (e = classroom.length)
continue;
if (newc >= classroom[0].length())
continue;
int mark = classroom[newr].charAt(newc);
if (mark == 'X')
continue;
if (mark == 'R')
newe = eFull;
if (mark == 'L')
newmask |= (1 = next.e())
continue;
bestE.put(new State(next.r(), next.c(), next.bitmask(), 0, 0), next.e());
// System.out.println("adding cell at row: " + next.r() + " col: " + next.c() +
// " with e :" + next.e());
q.offerLast(next);
added++;
}
}
return -1;
}
private State getStart(String[] classroom, int e) {
int r = -1, c = -1;
for (r = 0; r < classroom.length; ++r) {
int col = classroom[r].indexOf('S');
if (col == -1)
continue;
c = col;
break;
}
return new State(r, c, 0, e, 0);
}
private int getFinalBitset(String[] classroom,
Map lIndex) {
int cnt = 0;
for (int r = 0; r < classroom.length; ++r) {
for (int pos = 0; pos < classroom[r].length(); ++pos) {
if (classroom[r].charAt(pos) != 'L')
continue;
State litter = new State(r, pos, 0, 0, 0);
lIndex.put(litter, cnt);
cnt = cnt + 1 + litter.steps();
}
}
return (1
Подробнее здесь: https://stackoverflow.com/questions/796 ... take-a-loo
Этот простой 14 -линейный метод в Java по какой -то причине. Посмотрите, пожалуйста ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Java regex: удалить (двойной) отрицательный посмотрите вперед и посмотрите за
Anonymous » » в форуме JAVA - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-