-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathArrayDeduplicationIII.java
More file actions
44 lines (35 loc) · 1.07 KB
/
ArrayDeduplicationIII.java
File metadata and controls
44 lines (35 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
Given a sorted integer array, remove duplicate elements. For each group of elements with the same value do not keep any of them. Do this in-place, using the left side of the original array and and maintain the relative order of the elements of the array. Return the array after deduplication.
Assumptions
The given array is not null
Examples
{1, 2, 2, 3, 3, 3} → {1}
*/
public class Solution {
public int[] dedup(int[] input) {
if (input.length <= 1 || input == null) {
return input;
}
int slow = 0;
int fast = 0;
int beginFlag;
while (fast < input.length) {
beginFlag = fast; // !!!
while (fast < input.length && input[fast] == input[beginFlag]) {
fast++;
}
// now fast points to the first element after beginFlag that doesn't equal to input[beginFlag]
if (fast - beginFlag == 1) {
input[slow++] = input[beginFlag];
}
}
return reSize(input, slow);
}
private static int[] reSize(int[] input, int slow) {
int[] output = new int[slow];
for (int i = 0; i < slow; i++) {
output[i] = input[i];
}
return output;
}
}