回答編集履歴

6

微修正

2020/12/28 00:35

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -5,6 +5,8 @@
5
5
  ```C
6
6
 
7
7
  int unique(int *array, int n) {
8
+
9
+ if ( array == NULL ) return 0;
8
10
 
9
11
  int* dst = array; // 重複を取り除いた列 : [array, dst) 最初は空
10
12
 

5

微修正

2020/12/28 00:35

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -30,4 +30,4 @@
30
30
 
31
31
  ```
32
32
 
33
- ※ begin から始まり end を超えない範囲を [begin,end) と表記しています。
33
+ ※ begin から始まり end に満たない(begin以上/end未満)範囲を [begin,end) と表記しています。

4

微修正

2020/12/24 01:39

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -8,13 +8,13 @@
8
8
 
9
9
  int* dst = array; // 重複を取り除いた列 : [array, dst) 最初は空
10
10
 
11
- // 範囲:[array, array+n) 内の各値 *src に対し:
11
+ // [array, array+n) 内の各値 *src に対し:
12
12
 
13
13
  for( int* src = array; src != array+n; ++src ) {
14
14
 
15
15
  int* p;
16
16
 
17
- // 範囲:[array, dst) つまり重複を取り除いた列の中から *src を探し
17
+ // [array, dst) つまり重複を取り除いた列の中から *src を探し
18
18
 
19
19
  for ( p = array; p != dst && *p != *src; ++p ) { }
20
20
 

3

加筆

2020/12/24 01:38

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -29,3 +29,5 @@
29
29
  }
30
30
 
31
31
  ```
32
+
33
+ ※ begin から始まり end を超えない範囲を [begin,end) と表記しています。

2

微修正

2020/12/24 01:34

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  int unique(int *array, int n) {
8
8
 
9
- int* dst = array;
9
+ int* dst = array; // 重複を取り除いた列 : [array, dst) 最初は空
10
10
 
11
11
  // 範囲:[array, array+n) 内の各値 *src に対し:
12
12
 
@@ -14,11 +14,11 @@
14
14
 
15
15
  int* p;
16
16
 
17
- // 範囲:[array, dst) から *src を探し
17
+ // 範囲:[array, dst) つまり重複を取り除いた列の中から *src を探し
18
18
 
19
19
  for ( p = array; p != dst && *p != *src; ++p ) { }
20
20
 
21
- // 見つからなかったら末尾に追加する
21
+ // 見つからなかったら(重複しないんだから)末尾に追加する
22
22
 
23
23
  if ( p == dst ) *dst++ = *src;
24
24
 

1

加筆

2020/12/24 01:26

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -8,17 +8,23 @@
8
8
 
9
9
  int* dst = array;
10
10
 
11
+ // 範囲:[array, array+n) 内の各値 *src に対し:
12
+
11
13
  for( int* src = array; src != array+n; ++src ) {
12
14
 
13
15
  int* p;
14
16
 
17
+ // 範囲:[array, dst) 内から *src を探し
18
+
15
19
  for ( p = array; p != dst && *p != *src; ++p ) { }
20
+
21
+ // 見つからなかったら末尾に追加する
16
22
 
17
23
  if ( p == dst ) *dst++ = *src;
18
24
 
19
25
  }
20
26
 
21
- return dst - array;
27
+ return dst - array; // [array, dst) の要素数を返す
22
28
 
23
29
  }
24
30