From 8dc387fef9322083e425686ffaddb37486729b48 Mon Sep 17 00:00:00 2001 From: Jose R Marcano Date: Sat, 28 Mar 2020 02:13:40 -0700 Subject: [PATCH 1/3] Completed DP-1 initial version --- CoinChange.java | 28 ++++++++++++++++++++++++++++ HouseRobber.java | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 CoinChange.java create mode 100644 HouseRobber.java diff --git a/CoinChange.java b/CoinChange.java new file mode 100644 index 00000000..91fe9809 --- /dev/null +++ b/CoinChange.java @@ -0,0 +1,28 @@ +// Time Complexity : O(m*n) +// Space Complexity : O(m*n) +// Did this code successfully run on Leetcode :yes. + +// Any problem you faced while coding this : + + +// Your code here along with comments explaining your approach + + + public int coinChange(int[] coins, int amount) { + // edge case + if (coins == null || coins.length == 0) return 0; + int[][] dp = new int[coins.length + 1][amount + 1]; // because of 0 + for (int i = 1; i < dp[0].length; i++) dp[0][i] = 9999; + for (int i = 1; i < dp.length; i++) { + for (int j = 1; j < dp[0].length; j++) { + if (j < coins[i - 1]) { + dp[i][j] = dp[i - 1][j]; + } else { + dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - coins[i - 1]] + 1); + } + } + } + int result = dp[dp.length - 1][dp[0].length - 1]; + if (result >= 9999) return -1; + return result; + } \ No newline at end of file diff --git a/HouseRobber.java b/HouseRobber.java new file mode 100644 index 00000000..b361c260 --- /dev/null +++ b/HouseRobber.java @@ -0,0 +1,28 @@ +// Time Complexity : O(n) +// Space Complexity : O(n) +// Did this code successfully run on Leetcode :yes. + +// Any problem you faced while coding this : + + +// Your code here along with comments explaining your approach + + + public int rob(int[] nums) { + if (nums==null || nums.length==0) + return 0; + if (nums.length==1) + return nums[0]; + if (nums.length==2) + return Math.max(nums[0],nums[1]); + int cache[]=new int[nums.length]; + cache[0]=nums[0]; + cache[1]=nums[1]; + cache[2]=cache[0]+nums[2]; + + for (int i=3;i Date: Mon, 5 Jan 2026 00:31:54 -0800 Subject: [PATCH 2/3] DP 1 --- .classpath | 6 ++++ .project | 17 +++++++++++ CoinChange.java | 76 +++++++++++++++++++++++++++++++++++++----------- HouseRobber.java | 40 ++++++++++++++----------- 4 files changed, 105 insertions(+), 34 deletions(-) create mode 100644 .classpath create mode 100644 .project diff --git a/.classpath b/.classpath new file mode 100644 index 00000000..3f3893af --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 00000000..a54c51d3 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + DP-1 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/CoinChange.java b/CoinChange.java index 91fe9809..be840f38 100644 --- a/CoinChange.java +++ b/CoinChange.java @@ -4,25 +4,67 @@ // Any problem you faced while coding this : - // Your code here along with comments explaining your approach +public class CoinChange { + + // Time c omplexity O(m x n) + // space complexity O(m x n) + public int coinChange(int[] coins, int amount) { + // edge case + if (coins == null || coins.length == 0) + return 0; + int[][] dp = new int[coins.length + 1][amount + 1]; // because of 0 + for (int i = 1; i < dp[0].length; i++) + dp[0][i] = 9999; + for (int i = 1; i < dp.length; i++) { + for (int j = 1; j < dp[0].length; j++) { + if (j < coins[i - 1]) { + dp[i][j] = dp[i - 1][j]; + } else { + dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - coins[i - 1]] + 1); + } + } + } + int result = dp[dp.length - 1][dp[0].length - 1]; + if (result >= 9999) + return -1; + return result; + } + + /* + * + // Time c omplexity O(m x n) + // space complexity O(m x n) + // + * + public int coinChange(int[] coins, int amount) { + int m= coins.length, n=amount; + int [][] dp= new int[m+1][n+1]; - public int coinChange(int[] coins, int amount) { - // edge case - if (coins == null || coins.length == 0) return 0; - int[][] dp = new int[coins.length + 1][amount + 1]; // because of 0 - for (int i = 1; i < dp[0].length; i++) dp[0][i] = 9999; - for (int i = 1; i < dp.length; i++) { - for (int j = 1; j < dp[0].length; j++) { - if (j < coins[i - 1]) { - dp[i][j] = dp[i - 1][j]; - } else { - dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - coins[i - 1]] + 1); + dp[0][0]=0; + + // top row + for (int j=1; j<=n;j++){ + dp[0][j]=Integer.MAX_VALUE-2; } - } + + for (int i=1; i<=m;i++){ + for (int j=1; j<=n;j++){ + if (j=Integer.MAX_VALUE-2) + return -1; + return resp; } - int result = dp[dp.length - 1][dp[0].length - 1]; - if (result >= 9999) return -1; - return result; - } \ No newline at end of file + + */ + +} \ No newline at end of file diff --git a/HouseRobber.java b/HouseRobber.java index b361c260..acf0392e 100644 --- a/HouseRobber.java +++ b/HouseRobber.java @@ -4,25 +4,31 @@ // Any problem you faced while coding this : - // Your code here along with comments explaining your approach +public class HouseRobber { + + public int rob(int[] nums) { + if (nums == null || nums.length == 0) + return 0; + if (nums.length == 1) + return nums[0]; + if (nums.length == 2) + return Math.max(nums[0], nums[1]); + int cache[] = new int[nums.length]; + cache[0] = nums[0]; + cache[1] = nums[1]; + cache[2] = cache[0] + nums[2]; - public int rob(int[] nums) { - if (nums==null || nums.length==0) - return 0; - if (nums.length==1) - return nums[0]; - if (nums.length==2) - return Math.max(nums[0],nums[1]); - int cache[]=new int[nums.length]; - cache[0]=nums[0]; - cache[1]=nums[1]; - cache[2]=cache[0]+nums[2]; + for (int i = 3; i < nums.length; i++) { + cache[i] = Math.max(nums[i] + cache[i - 2], nums[i] + cache[i - 3]); + } + return Math.max(cache[nums.length - 1], cache[nums.length - 2]); - for (int i=3;i Date: Mon, 5 Jan 2026 00:39:02 -0800 Subject: [PATCH 3/3] adding new test cases --- CoinChange.java | 1 - HouseRobber.java | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CoinChange.java b/CoinChange.java index be840f38..0bed7f9d 100644 --- a/CoinChange.java +++ b/CoinChange.java @@ -36,7 +36,6 @@ public int coinChange(int[] coins, int amount) { * // Time c omplexity O(m x n) // space complexity O(m x n) - // * public int coinChange(int[] coins, int amount) { int m= coins.length, n=amount; diff --git a/HouseRobber.java b/HouseRobber.java index acf0392e..c6886d61 100644 --- a/HouseRobber.java +++ b/HouseRobber.java @@ -27,6 +27,26 @@ public int rob(int[] nums) { } + + // time complexity O(n) + // Space complexity O(1) + // just using two variable and temp variable to store prev robbed, this is more efficient + /*public int rob(int[] nums) { + if (nums==null || nums.length==0) + return 0; + int robbed=0; + int notRobbed=0; + for (int i=0;i