回答編集履歴
1
バグ修正とI/F合わせ
test
CHANGED
@@ -1,16 +1,36 @@
|
|
1
1
|
順序がつくもので、量が多ければ双方ソートして頭からせーのっていうのが一番速い気がします(気がするだけ)。
|
2
2
|
|
3
3
|
※AもBもuniqueを仮定
|
4
|
+
|
5
|
+
※I/F合わせてソートするオブジェクトも変わりました
|
6
|
+
|
7
|
+
※Aが空になったときにオーバーフローするバグを修正しました
|
4
8
|
|
5
9
|
|
6
10
|
|
7
11
|
```JavaScript
|
8
12
|
|
9
|
-
function
|
13
|
+
function compareFunc_XXX(left, right) {
|
10
14
|
|
11
|
-
|
15
|
+
if (left[0] < right[0]) return -1
|
12
16
|
|
17
|
+
if (left[0] > right[0]) return 1
|
18
|
+
|
19
|
+
return 0;
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
function getUnique_XXX(a,b) {
|
26
|
+
|
27
|
+
const aa = a.map(v => [`${v.x}:${v.y}`,v]);
|
28
|
+
|
29
|
+
const bb = b.map(v => [`${v.x}:${v.y}`,v]);
|
30
|
+
|
31
|
+
const sortA = aa.sort(compareFunc_XXX);
|
32
|
+
|
13
|
-
const sortB = b.sort();
|
33
|
+
const sortB = bb.sort(compareFunc_XXX);
|
14
34
|
|
15
35
|
let idxA = 0;
|
16
36
|
|
@@ -20,19 +40,23 @@
|
|
20
40
|
|
21
41
|
const lenB = b.length;
|
22
42
|
|
43
|
+
const resA = [];
|
44
|
+
|
45
|
+
const resB = [];
|
46
|
+
|
23
47
|
|
24
48
|
|
25
49
|
while (idxA != lenA || idxB != lenB) {
|
26
50
|
|
27
|
-
if (idxB == lenB || sortA[idxA] < sortB[idxB]) {
|
51
|
+
if (idxB == lenB || (idxA != lenA && sortA[idxA][0] < sortB[idxB][0])) {
|
28
52
|
|
29
|
-
resA.push(sortA[idxA]);
|
53
|
+
resA.push(sortA[idxA][1]);
|
30
54
|
|
31
55
|
++idxA;
|
32
56
|
|
33
|
-
} else if (idxA == lenA || sortA[idxA] > sortB[idxB]) {
|
57
|
+
} else if (idxA == lenA || sortA[idxA][0] > sortB[idxB][0]) {
|
34
58
|
|
35
|
-
resB.push(sortB[idxB]);
|
59
|
+
resB.push(sortB[idxB][1]);
|
36
60
|
|
37
61
|
++idxB;
|
38
62
|
|
@@ -46,20 +70,12 @@
|
|
46
70
|
|
47
71
|
}
|
48
72
|
|
73
|
+
return [resA, resB];
|
74
|
+
|
49
75
|
}
|
50
76
|
|
51
|
-
const a = [0,1,2,3];
|
52
|
-
|
53
|
-
const b = [2,3,4,5];
|
54
|
-
|
55
|
-
|
77
|
+
```
|
56
|
-
|
57
|
-
const d = [];
|
58
|
-
|
59
|
-
hoge(a,b,c,d);
|
60
78
|
|
61
79
|
|
62
80
|
|
63
|
-
```
|
64
|
-
|
65
|
-
結果
|
81
|
+
測ってみた結果はうちの環境だと、1000個で4と同じくらい、10000個で3に迫ります。
|