[英]How to sum two double linked lists in one list efficiently?
例如 listA = [3,6,7,4] 和 listB = [2,3,1] 並且 output 必須是 listC=[5,9,8,6]。 到目前為止,這是我所擁有的,但效率不高。
`public void sum(doublelist aList) {`
for (int i = 0; i < size(); i++) {
set(i, this.get(i) + other.get(i % other.size()));
}
}
正如您所說,您正在使用鏈表,您可以從一個元素導航到另一個元素:
public void sum(DoubleList aList){
DoubleNode cur=this.head;
DoubleNode other=aList.head;
while(cur!=null){
cur.setValue(cur.getValue()+other.getValue());
other=other.getNext();
if(other==null){
other=aList.head;
}
cur=cur.getNext();
}
}
此代碼假定您的DoubleList
包含類型為DoubleNode
的名為head
的頭節點屬性,並且DoubleNode
具有用於訪問值的方法double getValue()
/ void setValue(double value)
和用於檢索下一個元素的DoubleNode getNext()
方法。
這應該更有效,因為您不必每次都查詢列表( O(n)
而不是O(n^2)
)。
答案完全取決於您使用的是哪種列表。
但無論如何,您可以獲得的最佳復雜度是 O(n),您將必須對列表的每個元素至少迭代一次。
最簡單的是使用 ListIterator,它允許在遍歷列表時設置一個值。
void sum(List<Integer> l1, List<Integer> l2) {
final ListIterator<Integer> it1 = l1.listIterator();
final Iterator<Integer> it2 = l2.iterator();
while (it1.hasNext() && it2.hasNext()) {
it1.set(it1.next() + it2.next());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.