diff --git a/Problem1.java b/Problem1.java new file mode 100644 index 00000000..4320f8f0 --- /dev/null +++ b/Problem1.java @@ -0,0 +1,25 @@ +class Problem1 { + public int deleteAndEarn(int[] nums) { + + int max = 0; + for(int num: nums){ + max = Math.max(max, num); + } + + int[] arr = new int[max+1]; + for(int num: nums){ + arr[num] += num; + } + + int prev = arr[0]; + int curr = Math.max(arr[1],arr[0]); + + for(int i=2; i<=max; i++){ + int temp = curr; + curr = Math.max(curr, arr[i]+prev); + prev = temp; + } + + return curr; + } +} diff --git a/Problem2.java b/Problem2.java new file mode 100644 index 00000000..0497e8f2 --- /dev/null +++ b/Problem2.java @@ -0,0 +1,30 @@ +class Problem2 { + public int minFallingPathSum(int[][] matrix) { + int n = matrix.length; + + int min = Integer.MAX_VALUE; + + int[][] dp = new int[n][n]; + for(int i = 0; i < n; i++) { + dp[0][i] = matrix[0][i]; + } + + for(int i = 1; i < n; i++) { + for(int j = 0; j < n; j++) { + if(j == 0 ) { + dp[i][j] = matrix[i][j] + Math.min(dp[i - 1][j ], dp[i - 1][j+1]); + } else if(j == n - 1){ + dp[i][j] = matrix[i][j] + Math.min(dp[i - 1][j -1], dp[i - 1][j]); + } + else { + dp[i][j] = matrix[i][j] + Math.min((Math.min(dp[i - 1][j - 1], dp[i - 1][j])), dp[i - 1][j + 1]); + } + } + } + for(int i=0; i