Так что я пытаюсь решить эту проблему: http://oj.leetcode.com/problems/merge-intervals/Leetcode: почему этот алгоритм работает медленно?
Моего решения:
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
// Start typing your Java solution below
// DO NOT write main() function
// ArrayList<Interval> result = new ArrayList<Interval>();
//First sort the intervals
Collections.sort(intervals,new Comparator<Interval>(){
public int compare(Interval interval1, Interval interval2) {
if(interval1.start > interval2.start) return 1;
if(interval1.start == interval2.start) return 0;
if(interval1.start < interval2.start) return -1;
return 42;
}
});
for(int i = 0; i < intervals.size() - 1; i++){
Interval currentInterval = intervals.get(i);
Interval nextInterval = intervals.get(i+1);
if(currentInterval.end >= nextInterval.start){
intervals.set(i,new Interval(currentInterval.start,nextInterval.end));
intervals.remove(i+1);
i--;
}
}
return intervals;
}
}
Я видел некоторые блог, используя точно такое же решение, но получить признание, но мой отвергаются, потому что это занимает слишком много времени. Можете ли вы рассказать мне, почему это занимает больше времени, чем ожидалось? Приветствия
EDIT: решил, удалить слишком дорого, используя новый ArrayList для хранения результата быстрее
Что говорит профайлер? – SpongeBobFan
Этот вопрос не соответствует теме, потому что речь идет о [codereview] (http://codereview.stackexchange.com/). – Sirko
Удаление из головы -> середины массива довольно дорого, потому что основной массив должен быть скопирован при каждом вызове. Но @SpongeBobFan сказал, вы должны проверить это с помощью профилировщика. –