Skip to content

Commit 7a54eed

Browse files
authored
Merge pull request #2619 from aadil42/patch-62
2 parents eb7a6ac + c633e25 commit 7a54eed

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

javascript/0441-arranging-coins.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* https://leetcode.com/problems/arranging-coins/
3+
* Linear time
4+
* Time O(n) | Space O(1)
5+
* @param {number} n
6+
* @return {number}
7+
*/
8+
var arrangeCoins = function(n) {
9+
10+
let steps = 1;
11+
let canBuild = 0;
12+
13+
while(n >= steps) {
14+
n = n - steps;
15+
canBuild++;
16+
steps++;
17+
}
18+
19+
return canBuild || 1;
20+
};
21+
22+
/**
23+
* Binary Search
24+
* Time O(log(n)) | Space O(1)
25+
* @param {number} n
26+
* @return {number}
27+
*/
28+
var arrangeCoins = function(n) {
29+
30+
let left = 1;
31+
let right = n;
32+
let result = 0;
33+
34+
while(left <= right) {
35+
36+
const mid = Math.floor((right+left)/2);
37+
const total = (1 + mid) * (mid/2);
38+
if(n < total) {
39+
right = mid -1;
40+
} else {
41+
left = mid+1;
42+
result = Math.max(result, mid);
43+
}
44+
}
45+
46+
return result;
47+
};
48+
49+
/**
50+
* Math
51+
* Time O(1) | Space O(1)
52+
* @param {number} n
53+
* @return {number}
54+
*/
55+
var arrangeCoins = function(n) {
56+
let discriminant = 1 + 8 * n;
57+
let sqrtDiscriminant = Math.sqrt(discriminant);
58+
59+
let result1 = Math.floor((-1 + sqrtDiscriminant) / 2);
60+
let result2 = Math.floor((-1 - sqrtDiscriminant) / 2);
61+
62+
return Math.max(result1, result2);
63+
};

0 commit comments

Comments
 (0)