From 3e071f7a64a08f223f8b80c73995da2494211a37 Mon Sep 17 00:00:00 2001 From: Aadil <77232799+aadil42@users.noreply.github.com> Date: Thu, 22 Jun 2023 18:55:49 +0530 Subject: [PATCH 1/4] Create 0441-arranging-coins.js Solved 0441-arranging-coins.js in JS. --- javascript/0441-arranging-coins.js | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 javascript/0441-arranging-coins.js diff --git a/javascript/0441-arranging-coins.js b/javascript/0441-arranging-coins.js new file mode 100644 index 000000000..f3bff72a7 --- /dev/null +++ b/javascript/0441-arranging-coins.js @@ -0,0 +1,62 @@ +/** + * https://leetcode.com/problems/arranging-coins/ + * Linear time + * Time O(n) | Space O(1) + * @param {number} n + * @return {number} + */ +var arrangeCoins = function(n) { + + let steps = 1; + let canBuild = 0; + + while(n >= steps) { + n = n - steps; + canBuild++; + steps++; + } + + return canBuild || 1; +}; + +/** + * Binary Search + * + * Time O(n*log(n)) | Space O + * @param {number} n + * @return {number} + */ +var arrangeCoins = function(n) { + + let left = 1; + let right = n; + let result = 0; + + while(left <= right) { + + const mid = Math.floor((right+left)/2); + const total = (1 + mid) * (mid/2); + if(n < total) { + right = mid -1; + } else { + left = mid+1; + result = Math.max(result, mid); + } + } + + return result; + }; + +/** + * Math + * Time O(1) | Space O(1) + * @param {number} n + * @return {number} + */ +var arrangeCoins = function(n) { + + let result1 = Math.floor((-1 + Math.sqrt(1+(8*n)))/2); + let result2 = Math.floor((-1 - Math.sqrt(1+(8*n)))/2); + + return Math.max(result1, result2); +}; From 6a4623d33141b4664d5188e68021795fe68dde5e Mon Sep 17 00:00:00 2001 From: Aadil <77232799+aadil42@users.noreply.github.com> Date: Sun, 2 Jul 2023 21:26:07 +0530 Subject: [PATCH 2/4] Update 0441-arranging-coins.js Making math more readable. --- javascript/0441-arranging-coins.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/javascript/0441-arranging-coins.js b/javascript/0441-arranging-coins.js index f3bff72a7..450308337 100644 --- a/javascript/0441-arranging-coins.js +++ b/javascript/0441-arranging-coins.js @@ -54,9 +54,11 @@ var arrangeCoins = function(n) { * @return {number} */ var arrangeCoins = function(n) { - - let result1 = Math.floor((-1 + Math.sqrt(1+(8*n)))/2); - let result2 = Math.floor((-1 - Math.sqrt(1+(8*n)))/2); - - return Math.max(result1, result2); + let discriminant = 1 + 8 * n; + let sqrtDiscriminant = Math.sqrt(discriminant); + + let result1 = Math.floor((-1 + sqrtDiscriminant) / 2); + let result2 = Math.floor((-1 - sqrtDiscriminant) / 2); + + return Math.max(result1, result2); }; From 19882eaebe5bcfbda9dd024ce6a8222d9b1d687a Mon Sep 17 00:00:00 2001 From: aadil42 <77232799+aadil42@users.noreply.github.com> Date: Thu, 7 Sep 2023 13:23:03 +0530 Subject: [PATCH 3/4] Update 0441-arranging-coins.js Adding Space complexity to binary-search solution. --- javascript/0441-arranging-coins.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript/0441-arranging-coins.js b/javascript/0441-arranging-coins.js index 450308337..804d1ec1f 100644 --- a/javascript/0441-arranging-coins.js +++ b/javascript/0441-arranging-coins.js @@ -21,8 +21,7 @@ var arrangeCoins = function(n) { /** * Binary Search - * - * Time O(n*log(n)) | Space O + * Time O(n*log(n)) | Space O(1) * @param {number} n * @return {number} */ From c633e25aaa563d9483e017fa4d76cb41c92e8224 Mon Sep 17 00:00:00 2001 From: aadil42 <77232799+aadil42@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:16:17 +0530 Subject: [PATCH 4/4] Update 0441-arranging-coins.js Fixed Time-complexity. --- javascript/0441-arranging-coins.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/0441-arranging-coins.js b/javascript/0441-arranging-coins.js index 804d1ec1f..67875334a 100644 --- a/javascript/0441-arranging-coins.js +++ b/javascript/0441-arranging-coins.js @@ -21,7 +21,7 @@ var arrangeCoins = function(n) { /** * Binary Search - * Time O(n*log(n)) | Space O(1) + * Time O(log(n)) | Space O(1) * @param {number} n * @return {number} */