回答編集履歴

1

バグ修正とI/F合わせ

2019/11/11 11:15

投稿

dameo
dameo

スコア943

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 hoge(a, b, resA, resB) {
13
+ function compareFunc_XXX(left, right) {
10
14
 
11
- const sortA = a.sort();
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
- const c = [];
77
+ ```
56
-
57
- const d = [];
58
-
59
- hoge(a,b,c,d);
60
78
 
61
79
 
62
80
 
63
- ```
64
-
65
- 結果がcdります。
81
+ 測ってみた結果はうちの環境だ、1000個で4と同じくらい、10000個で3ります。