я был задан следующий вопрос в интервью:Объединение двух отсортированных итераторы в O (1) время
Объединить два итератора над их отсортированных содержание таким образом, что в результате итератор должен перебирать комбинации этих 2 итераторы в порядке сортировки по времени O (1) (эти итераторы перебирают по строке ).
Я написал код ниже, но я уверен, что он не выполняет в O (1) раз. Какой у вас совет по сопоставлению ограничений, заданных в интервью?
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class iteratorCombine {
// assumption1: elements are hardcoded
// assumption2: both iterators have equal number of elements
public static void main(String[] args) {
iteratorCombine testObj = new iteratorCombine();
Set<String> firstSet = new TreeSet<String>();
Set<String> secondSet = new TreeSet<String>();
Set<String> combinedSet;
firstSet = testObj.storeElements1(firstSet);
secondSet = testObj.storeElements2(secondSet);
Iterator<String> it1 = firstSet.iterator();
Iterator<String> it2 = secondSet.iterator();
combinedSet = testObj.combine(it1, it2);
// output
Iterator<String> itComb = combinedSet.iterator();
while(itComb.hasNext()){
System.out.println(itComb.next());
}
}
public Set<String> storeElements1(Set<String> firstSet){
firstSet.add("first3");
firstSet.add("first1");
firstSet.add("first2");
return firstSet;
}
public Set<String> storeElements2(Set<String> secondSet){
secondSet.add("second3");
secondSet.add("second1");
secondSet.add("second2");
return secondSet;
}
public Set<String> combine(Iterator<String> it1, Iterator<String>it2){
String firstEle, secondEle;
Set<String> combinedSet = new TreeSet<String>();
while (it1.hasNext() && it2.hasNext()) {
firstEle = it1.next();
secondEle = it2.next();
combinedSet.add(firstEle+secondEle);
}
return combinedSet;
}
}
Вы можете просто вставить код, выбрать все и Ctrl + K, чтобы сделать его кодовым блоком. –
Является ли создание итератора «O (1)», или у вас столько времени, сколько вы хотите создать итератор, но он должен функционировать в 'O (1)'? – Mshnik
Вам понадобится создать новый класс, который реализует 'Iterator'; вы не сможете повторно использовать итератор из другого места. –