File tree 1 file changed +44
-16
lines changed
1 file changed +44
-16
lines changed Original file line number Diff line number Diff line change 1
1
/**
2
- * Linear
3
- * Time O(N) | Space O(1)
4
- * https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
5
- * @param {number[] } nums
6
- * @return {number }
7
- */
2
+ * https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
3
+ *
4
+ * Time O(n) | Space O(1)
5
+ * @param {number[] } nums
6
+ * @return {number }
7
+ */
8
8
var removeDuplicates = function ( nums ) {
9
- if ( nums . length < 3 ) {
10
- return nums . length ;
9
+ let current = nums [ 0 ] ;
10
+ let sameElCount = 0 ;
11
+
12
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
13
+ if ( current === nums [ i ] ) {
14
+ sameElCount ++ ;
15
+ }
16
+ if ( current !== nums [ i ] ) {
17
+ current = nums [ i ] ;
18
+ sameElCount = 1 ;
11
19
}
12
- let l = 1 ;
13
- let r = 2 ;
14
- while ( r < nums . length ) {
15
- if ( nums [ l ] !== nums [ r ] || ( nums [ l ] === nums [ r ] && nums [ l - 1 ] !== nums [ r ] ) ) {
16
- l += 1 ;
17
- nums [ l ] = nums [ r ] ;
20
+ if ( sameElCount > 2 ) {
21
+ nums . splice ( i , 1 ) ;
22
+ i -- ;
23
+ }
24
+ }
25
+ } ;
26
+
27
+
28
+ /**
29
+ * Two pointer
30
+ * Time O(n^2) | Space O(1)
31
+ * @param {number[] } nums
32
+ * @return {number }
33
+ */
34
+ var removeDuplicates2 = function ( nums ) {
35
+ const isEdgeCase = ( nums . length < 2 )
36
+ if ( isEdgeCase ) return nums . length ;
37
+
38
+ let [ left , right ] = [ 2 , 2 ] ;
39
+
40
+ while ( right < nums . length ) { /* Time O(N) */
41
+ const isEqual = ( nums [ ( left - 2 ) ] === nums [ right ] ) ;
42
+ if ( ! isEqual ) {
43
+ nums [ left ] = nums [ right ] ;
44
+ left += 1 ;
18
45
}
19
- r += 1 ;
46
+
47
+ right += 1 ;
20
48
}
21
- return l + 1 ;
49
+ return left ;
22
50
} ;
You can’t perform that action at this time.
0 commit comments