-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathArrayDeduplicationII.java
More file actions
40 lines (31 loc) · 909 Bytes
/
ArrayDeduplicationII.java
File metadata and controls
40 lines (31 loc) · 909 Bytes
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
/*
Given a sorted integer array, remove duplicate elements. For each group of elements with the same value keep at most two of them. Do this in-place, using the left side of the original array 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, 2, 2, 3, 3}
*/
public class Solution {
public int[] dedup(int[] input) {
if (input.length <= 2 || input == null) {
return input;
}
int slow = 2;
int fast = 2;
while (fast < input.length) {
if (input[fast] != input[slow - 2]) {
input[slow++] = input[fast++];
} else {
fast++;
}
}
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;
}
}