的列表之間的比較複雜度O^2我有對象的兩個列表:減少對象
list1 = [{value: 'X'}, {value: 'Y'}, ..., {value: 'Z'}];
list2 = [{value: 'A'}, {value: 'B'}, ..., {value: 'C'}];
我有這樣的代碼,檢查在list2
值是否在list1
。如果是代碼沒有做任何事情,如果沒有,它應該添加到list1
(這將創建一個新列表,list3
)。這意味着我正在做兩個列表之間的聯合,而不保留重複的值。
for (let i = list2.length-1; i >= 0; i--) {
let item = list2[i];
let shared = false;
for (let j = list1.length-1; j >=0; j--) {
let childItem = list1[j];
if (item.value === childItem.value) {
shared = true;
break;
}
}
if (!shared) { newValues.push(item); }
}
list3 = list1.concat(newValues);
這工作正常,但我想知道如果我可以改善這個O(n * m)。
我不確定列表是否總是按默認排序,但從我所看到的(列表1和列表2)總是按值排序。
實施例:
var list1 = [{value: 'bar'}, {value: 'baz'}, {value: 'foo'}, {value: 'foz'}];
var list2 = [{value: 'bar'}, {value: 'foo'}, {value: 'test'}, {value: 'testz'}];
var list3 = union(list1, list2);
list3 = [{value: 'bar'}, {value: 'baz'}, {value: 'foo'}, {value: 'foz'}, {value: 'test'}, {value: 'testz'}];
當你說「在列表2的值是否在列表1」你的意思是,如果有的話,或者如果所有,價值觀? –
我會添加一個例子來澄清 – mk2