给定一个表L和另一个表P,它们包含以升序排列的整数。操作printLots(L,p)将打印L中的那些由P所指定的元素。例如,如果P=1,3,4,6,那么,L中位于第1,第3,第4,和第6个位置上的元素被打印出来。写出过程printLots(L,p)。只可使用 public 型的Collections API容器操作。该过程的运行时间是多少?
答案一:运行时间O(N²)
public static void printLots(List<Integer> L, List<Integer>P){
Iterator<Integer> iterL = L.iterator();
Iterator<Integer> iterP = P.iterator();
Integer itemL = null;
Integer itemP = 0;
int start = 0; //遍历链表的起始位置
while(iterL.hasNext()&&iterP.hasNext())
{
itemP = iterP.next();
System.out.println("Looking for the position "+itemP);
//遍历链表。查找链表L中的由链表P中的整数元素所指定位置上的元素。
while(start<itemP&&iterL.hasNext())
{
start++;
itemL = iterL.next();
}
System.out.println(itemL);
}
}
答案二:运行时间O(N)
public static void printLots2(List<Integer> L, List<Integer>P){
Iterator<Integer> iterL = L.iterator();
Iterator<Integer> iterP = P.iterator();
Integer llots = iterL.next();
Integer plots = iterP.next();
int index = 1;
while(llots!=null && plots != null){
if(plots == index++){
System.out.println(llots);
if (iterP.hasNext()) {
plots = iterP.next();
}else{
break;
}
}
llots = iterL.next();
}
}
测试代码:
public static void main(String[] args) {
List<Integer> l = new ArrayList();
List<Integer> p = new ArrayList();
l.add(11);
l.add(22);
l.add(33);
l.add(44);
l.add(55);
l.add(66);
l.add(77);
l.add(88);
l.add(99);
l.add(100);
p.add(1);
p.add(2);
p.add(4);
p.add(6);
long startTime = System.currentTimeMillis();
printLots(l, p);
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
startTime = System.currentTimeMillis();
printLots2(l, p);
endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
}