From 74b281ac6c036aefd8de2235da072eec3952eaa6 Mon Sep 17 00:00:00 2001 From: Ben Makusha Date: Fri, 19 Jan 2024 12:09:00 -0500 Subject: [PATCH] Create a0931 Minimum falling path sum --- .idea/workspace.xml | 16 ++++----- .../problemset/a0931/MinFallingPathSum.java | 21 ++++++++++++ .../a0931/MinFallingPathSumTest.java | 34 +++++++++++++++++++ 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/main/java/problemset/a0931/MinFallingPathSum.java create mode 100644 src/test/java/problemset/a0931/MinFallingPathSumTest.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 920475c..1b1ab89 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,8 +5,8 @@ - - + + - - + + - + + - diff --git a/src/main/java/problemset/a0931/MinFallingPathSum.java b/src/main/java/problemset/a0931/MinFallingPathSum.java new file mode 100644 index 0000000..b5c79c8 --- /dev/null +++ b/src/main/java/problemset/a0931/MinFallingPathSum.java @@ -0,0 +1,21 @@ +package problemset.a0931; + +public class MinFallingPathSum { + public int minFallingPathSum(int[][] matrix) { + int n = matrix.length; + var f = new int[n]; + for (var row : matrix) { + var g = f.clone(); + for (int j = 0; j < n; j++) { + if (j > 0) g[j] = Math.min(g[j], f[j - 1]); + if (j + 1 < n) g[j] = Math.min(g[j], g[j + 1]); + g[j] += row[j]; + } + f = g; + } + int ans = Integer.MAX_VALUE; + for (var x : f) + ans = Math.min(ans, x); + return ans; + } +} diff --git a/src/test/java/problemset/a0931/MinFallingPathSumTest.java b/src/test/java/problemset/a0931/MinFallingPathSumTest.java new file mode 100644 index 0000000..795c600 --- /dev/null +++ b/src/test/java/problemset/a0931/MinFallingPathSumTest.java @@ -0,0 +1,34 @@ +package problemset.a0931; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MinFallingPathSumTest { + + private MinFallingPathSum sum; + private int[][] testcaseOne; + private int[][] testcaseTwo; + + @BeforeEach + void setUp() { + sum = new MinFallingPathSum(); + testcaseOne = new int[][]{{2, 1, 3}, {6, 5, 4}, {7, 8, 9}}; + testcaseTwo = new int[][]{{-19, 57}, {-40, -5}}; + } + + @Test + void test_minFallingPathSum_v1() { + var expectedResult = 13; + var actualResult = sum.minFallingPathSum(testcaseOne); + assertEquals(expectedResult, actualResult); + } + + @Test + void test_minFallingPathSum_v2() { + var expectedResult = -59; + var actualResult = sum.minFallingPathSum(testcaseTwo); + assertEquals(expectedResult, actualResult); + } +} \ No newline at end of file