File tree 5 files changed +170
-0
lines changed
encode-and-decode-strings
longest-consecutive-sequence
product-of-array-except-self
5 files changed +170
-0
lines changed Original file line number Diff line number Diff line change
1
+ var threeSum = function ( nums ) {
2
+ // Sort nums array
3
+ const sortedNums = nums . sort ( ( a , b ) => a - b ) ;
4
+ let result = [ ] ;
5
+
6
+ // Start iteration to pick first element for 3sum
7
+ for ( let i = 0 ; i < sortedNums . length ; i ++ ) {
8
+ // Check if the first element is already greater than 0, no valid triplets possible after this point
9
+ if ( sortedNums [ i ] > 0 ) {
10
+ break ;
11
+ }
12
+
13
+ // Skip duplicates of the first element to avoid redundant triplets
14
+ if ( i > 0 && sortedNums [ i ] === sortedNums [ i - 1 ] ) {
15
+ continue ;
16
+ }
17
+
18
+ // Iterate to find sum of two pointer and nums[i]
19
+ let left = i + 1 ;
20
+ let right = sortedNums . length - 1 ;
21
+
22
+ while ( left < right ) {
23
+ let sum = sortedNums [ i ] + sortedNums [ left ] + sortedNums [ right ] ;
24
+
25
+ if ( sum === 0 ) {
26
+ result . push ( [ sortedNums [ i ] , sortedNums [ left ] , sortedNums [ right ] ] ) ;
27
+ // Skip duplicates of left and right pointers to avoid redundant triplets
28
+ while ( sortedNums [ left ] === sortedNums [ left + 1 ] ) left ++ ;
29
+ while ( sortedNums [ right ] === sortedNums [ right - 1 ] ) right -- ;
30
+ left ++ ;
31
+ right -- ;
32
+ } else if ( sum < 0 ) {
33
+ left ++ ;
34
+ } else if ( sum > 0 ) {
35
+ right -- ;
36
+ }
37
+ }
38
+ }
39
+ return result ;
40
+ } ;
41
+
42
+ // TC: O(n^2)
43
+ // SC: O(n)
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ /**
3
+ * @param {string[] } strs
4
+ * @returns {string }
5
+ */
6
+ encode ( strs ) {
7
+ let result = "" ;
8
+ for ( let str of strs ) {
9
+ result += str . length . toString ( ) + "#" + str ;
10
+ }
11
+ return result ;
12
+ }
13
+
14
+ /**
15
+ * @param {string } str
16
+ * @returns {string[] }
17
+ */
18
+ decode ( str ) {
19
+ let result = [ ] ;
20
+ let i = 0 ;
21
+
22
+ while ( i < str . length ) {
23
+ // Find the position of the next '#'
24
+ let j = i ;
25
+ while ( str [ j ] !== "#" ) {
26
+ j ++ ;
27
+ }
28
+
29
+ // Length of the next string
30
+ const len = parseInt ( str . slice ( i , j ) ) ;
31
+ i = j + 1 ; // Move past the '#'
32
+
33
+ // Extract the string of length 'len'
34
+ result . push ( str . slice ( i , i + len ) ) ;
35
+ i += len ; // Move past the extracted string
36
+ }
37
+
38
+ return result ;
39
+ }
40
+ }
41
+
42
+ // TC: O(n),O(n)
43
+ // SC: O(n),O(n)
Original file line number Diff line number Diff line change
1
+ var longestConsecutive = function ( nums ) {
2
+ // Return 0 if there are no elements in nums
3
+ if ( nums . length === 0 ) return 0 ;
4
+
5
+ // Create a set to find values efficiently
6
+ const numSet = new Set ( nums ) ;
7
+ let maxLength = 0 ;
8
+
9
+ for ( let num of numSet ) {
10
+ // Check if this is the start of a sequence
11
+ if ( ! numSet . has ( num - 1 ) ) {
12
+ let currentNum = num ;
13
+ let currentLength = 1 ;
14
+
15
+ // Count the length of the sequence
16
+ while ( numSet . has ( currentNum + 1 ) ) {
17
+ currentNum += 1 ;
18
+ currentLength += 1 ;
19
+ }
20
+
21
+ // Update the maximum length
22
+ maxLength = Math . max ( maxLength , currentLength ) ;
23
+ }
24
+ }
25
+
26
+ return maxLength ;
27
+ } ;
28
+
29
+ // TC: O(n)
30
+ // SC: O(n)
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number[] }
4
+ */
5
+ var productExceptSelf = function ( nums ) {
6
+ const len = nums . length ;
7
+ const lastIndex = len - 1 ;
8
+
9
+ // Declare prefix, postfix array
10
+ let prefix = new Array ( len ) . fill ( 1 ) ;
11
+ let postfix = new Array ( len ) . fill ( 1 ) ;
12
+
13
+ // Iterate loop to add prefix[i-1]*nums[i] values into prefix array
14
+ prefix [ 0 ] = nums [ 0 ] ;
15
+ for ( let i = 1 ; i < nums . length ; i ++ ) {
16
+ prefix [ i ] = prefix [ i - 1 ] * nums [ i ] ;
17
+ }
18
+
19
+ // Iterate loop to add postfix[i]*nums[i-1] values into postfix array
20
+ postfix [ lastIndex ] = nums [ lastIndex ] ;
21
+ for ( let i = lastIndex ; i >= 1 ; i -- ) {
22
+ postfix [ i - 1 ] = postfix [ i ] * nums [ i - 1 ] ;
23
+ }
24
+
25
+ // Make output array with prefix and postfix arrays
26
+ let output = new Array ( len ) . fill ( 1 ) ;
27
+
28
+ // First index value is equal to postfix[1]
29
+ output [ 0 ] = postfix [ 1 ] ;
30
+ // Last index value is equal to prefix[lastIndex-1]
31
+ output [ lastIndex ] = prefix [ lastIndex - 1 ] ;
32
+ for ( let i = 1 ; i < len - 1 ; i ++ ) {
33
+ output [ i ] = prefix [ i - 1 ] * postfix [ i + 1 ] ;
34
+ }
35
+
36
+ return output ;
37
+ } ;
38
+
39
+ // TC: O(n)
40
+ // SC: O(n)
Original file line number Diff line number Diff line change
1
+ var topKFrequent = function ( nums , k ) {
2
+ // 1. Hashmap { num : frequency }
3
+ let map = { } ;
4
+
5
+ // 2. Iterate counts frequency of each value
6
+ for ( num of nums ) {
7
+ // Check there is already num key or not
8
+ if ( ! map [ num ] ) map [ num ] = 0 ;
9
+ map [ num ] ++ ;
10
+ }
11
+
12
+ // 3. Sort frequency and return sliced array
13
+ return [ ...Object . keys ( map ) ] . sort ( ( a , b ) => map [ b ] - map [ a ] ) . slice ( 0 , k ) ;
14
+ } ;
You can’t perform that action at this time.
0 commit comments