1
+ // Runtime: 232 ms (Top 93.36%) | Memory: 57.4 MB (Top 48.67%)
1
2
/**
2
3
* The buckets solution.
3
- *
4
- * Time Complexity: O(n)
4
+ *
5
+ * Time Complexity: O(n)
5
6
* Space Complexity: O(n)
6
- *
7
+ *
7
8
* @param {number[] } nums
8
9
* @return {number }
9
10
*/
10
11
var maximumGap = function ( nums ) {
11
- const n = nums . length
12
+ const n = nums . length
12
13
13
- if ( n < 2 ) {
14
- return 0
15
- }
14
+ if ( n < 2 ) {
15
+ return 0
16
+ }
16
17
17
- if ( n < 3 ) {
18
- return Math . abs ( nums [ 0 ] - nums [ 1 ] )
19
- }
18
+ if ( n < 3 ) {
19
+ return Math . abs ( nums [ 0 ] - nums [ 1 ] )
20
+ }
20
21
21
- let maxNum = - Infinity
22
- let minNum = + Infinity
22
+ let maxNum = - Infinity
23
+ let minNum = + Infinity
23
24
24
- for ( let i = 0 ; i < n ; i ++ ) {
25
- maxNum = Math . max ( maxNum , nums [ i ] )
26
- minNum = Math . min ( minNum , nums [ i ] )
27
- }
25
+ for ( let i = 0 ; i < n ; i ++ ) {
26
+ maxNum = Math . max ( maxNum , nums [ i ] )
27
+ minNum = Math . min ( minNum , nums [ i ] )
28
+ }
28
29
29
- if ( maxNum === minNum ) {
30
- return 0
31
- }
30
+ if ( maxNum === minNum ) {
31
+ return 0
32
+ }
32
33
33
- const k = n - 1
34
- const averageGap = ( maxNum - minNum ) / k
34
+ const k = n - 1
35
+ const averageGap = ( maxNum - minNum ) / k
35
36
36
- const minBuckets = new Array ( k )
37
- const maxBuckets = new Array ( k )
37
+ const minBuckets = new Array ( k )
38
+ const maxBuckets = new Array ( k )
38
39
39
- minBuckets [ 0 ] = minNum
40
- maxBuckets [ 0 ] = minNum
40
+ minBuckets [ 0 ] = minNum
41
+ maxBuckets [ 0 ] = minNum
41
42
42
- minBuckets [ k - 1 ] = maxNum
43
- maxBuckets [ k - 1 ] = maxNum
43
+ minBuckets [ k - 1 ] = maxNum
44
+ maxBuckets [ k - 1 ] = maxNum
44
45
45
- for ( let i = 0 ; i < n ; i ++ ) {
46
- if ( minNum === nums [ i ] || nums [ i ] === maxNum ) {
47
- continue
48
- }
46
+ for ( let i = 0 ; i < n ; i ++ ) {
47
+ if ( minNum === nums [ i ] || nums [ i ] === maxNum ) {
48
+ continue
49
+ }
49
50
50
- const j = Math . floor ( ( nums [ i ] - minNum ) / averageGap )
51
+ const j = Math . floor ( ( nums [ i ] - minNum ) / averageGap )
51
52
52
- minBuckets [ j ] = minBuckets [ j ] ? Math . min ( minBuckets [ j ] , nums [ i ] ) : nums [ i ]
53
- maxBuckets [ j ] = maxBuckets [ j ] ? Math . max ( maxBuckets [ j ] , nums [ i ] ) : nums [ i ]
54
- }
53
+ minBuckets [ j ] = minBuckets [ j ] ? Math . min ( minBuckets [ j ] , nums [ i ] ) : nums [ i ]
54
+ maxBuckets [ j ] = maxBuckets [ j ] ? Math . max ( maxBuckets [ j ] , nums [ i ] ) : nums [ i ]
55
+ }
55
56
56
- let largestGap = 0
57
- let prevMaxIndex = 0
57
+ let largestGap = 0
58
+ let prevMaxIndex = 0
58
59
59
- for ( let i = 1 ; i < n - 1 ; i ++ ) {
60
- if ( minBuckets [ i ] ) {
61
- largestGap = Math . max ( largestGap , minBuckets [ i ] - maxBuckets [ prevMaxIndex ] )
62
- }
60
+ for ( let i = 1 ; i < n - 1 ; i ++ ) {
61
+ if ( minBuckets [ i ] ) {
62
+ largestGap = Math . max ( largestGap , minBuckets [ i ] - maxBuckets [ prevMaxIndex ] )
63
+ }
63
64
64
- if ( maxBuckets [ i ] ) {
65
- prevMaxIndex = i
66
- }
67
- }
65
+ if ( maxBuckets [ i ] ) {
66
+ prevMaxIndex = i
67
+ }
68
+ }
68
69
69
- return largestGap
70
+ return largestGap
70
71
}
0 commit comments