diff --git a/combination-sum/gwbaik9717.js b/combination-sum/gwbaik9717.js new file mode 100644 index 000000000..e5675acf5 --- /dev/null +++ b/combination-sum/gwbaik9717.js @@ -0,0 +1,32 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (candidates, target) { + const answer = []; + const n = candidates.length; + const combi = (i, sum, arr) => { + for (let j = i; j < n; j++) { + const candidate = candidates[j]; + const newSum = sum + candidate; + + if (newSum === target) { + answer.push([...arr, candidate]); + continue; + } + + if (newSum > target) { + continue; + } + + if (newSum < target) { + combi(j, newSum, [...arr, candidate]); + } + } + }; + + combi(0, 0, []); + + return answer; +}; diff --git a/maximum-subarray/gwbaik9717.js b/maximum-subarray/gwbaik9717.js new file mode 100644 index 000000000..e54d84a52 --- /dev/null +++ b/maximum-subarray/gwbaik9717.js @@ -0,0 +1,25 @@ +// Time complexity: O(n) +// Space complexity: O(1) + +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function (nums) { + const n = nums.length; + const dp = [0, 0]; + + let answer = Number.MIN_SAFE_INTEGER; + + for (let i = 1; i <= n; i++) { + if (i % 2 !== 0) { + dp[1] = Math.max(dp[0] + nums[i - 1], nums[i - 1]); + answer = Math.max(answer, dp[1]); + } else { + dp[0] = Math.max(dp[1] + nums[i - 1], nums[i - 1]); + answer = Math.max(answer, dp[0]); + } + } + + return answer; +}; diff --git a/product-of-array-except-self/gwbaik9717.js b/product-of-array-except-self/gwbaik9717.js new file mode 100644 index 000000000..bc9a20eea --- /dev/null +++ b/product-of-array-except-self/gwbaik9717.js @@ -0,0 +1,24 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function (nums) { + const n = nums.length; + const fromLeft = Array.from({ length: n + 1 }, () => 1); + const fromRight = Array.from({ length: n + 1 }, () => 1); + + for (let i = 1; i <= n; i++) { + fromLeft[i] = fromLeft[i - 1] * nums[i - 1]; + } + + for (let i = n - 1; i >= 0; i--) { + fromRight[i] = fromRight[i + 1] * nums[i]; + } + + return nums.map((num, i) => { + return fromLeft[i] * fromRight[i + 1]; + }); +}; diff --git a/reverse-bits/gwbaik9717.js b/reverse-bits/gwbaik9717.js new file mode 100644 index 000000000..723e629df --- /dev/null +++ b/reverse-bits/gwbaik9717.js @@ -0,0 +1,25 @@ +// Time complexity: O(1) +// Space complexity: O(1) + +/** + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +var reverseBits = function (n) { + const stack = []; + let current = n; + + for (let i = 0; i < 32; i++) { + stack.push(current % 2); + current = Math.floor(current / 2); + } + + let answer = 0; + + for (let i = 0; i < 32; i++) { + const popped = stack.pop(); + answer += popped * 2 ** i; + } + + return answer; +}; diff --git a/two-sum/gwbaik9717.js b/two-sum/gwbaik9717.js new file mode 100644 index 000000000..c7b1397de --- /dev/null +++ b/two-sum/gwbaik9717.js @@ -0,0 +1,22 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function (nums, target) { + const map = new Map(); + + for (let i = 0; i < nums.length; i++) { + const num = nums[i]; + const diff = target - num; + + if (map.has(diff)) { + return [i, map.get(diff)]; + } else { + map.set(num, i); + } + } +};