File tree Expand file tree Collapse file tree 1 file changed +44
-16
lines changed
Expand file tree Collapse file tree 1 file changed +44
-16
lines changed Original file line number Diff line number Diff line change 11/**
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+ */
88var 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 ;
1119 }
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 ;
1845 }
19- r += 1 ;
46+
47+ right += 1 ;
2048 }
21- return l + 1 ;
49+ return left ;
2250} ;
You can’t perform that action at this time.
0 commit comments