From c047bbc65576659bf9f44be318aad6dd38f99c96 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 2 Sep 2024 00:59:43 -0400 Subject: [PATCH] =?UTF-8?q?[Hacker=20Rank]=20Interview=20Preparation=20Kit?= =?UTF-8?q?:=20Arrays:=20Array=20Manipulation.=20Solved=20(Brute=20Force?= =?UTF-8?q?=20solution)=20=E2=9C=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../arrays/CrushBruteForce.java | 48 ++++++++++++++ .../arrays/CrushBruteForceTest.java | 62 +++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForce.java create mode 100644 algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForceTest.java diff --git a/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForce.java b/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForce.java new file mode 100644 index 0000000..eaf5f9f --- /dev/null +++ b/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForce.java @@ -0,0 +1,48 @@ +package ae.hackerrank.interview_preparation_kit.arrays; + +import java.util.Arrays; +import java.util.List; + + +/** + * Crush (Brute Force). + * + * @link Problem definition [[docs/hackerrank/interview_preparation_kit/arrays/crush.md]] + * @link Solution notes [[docs/hackerrank/interview_preparation_kit/arrays/crush_optimized-solution-notes.md]] + */ +public class CrushBruteForce { + + private CrushBruteForce() { + } + + static java.util.logging.Logger logger = util.CustomLogger.getLogger(); + + private static final int INITIALIZER = 0; + + /** + * arrayManipulation. + */ + public static long arrayManipulation(int n, List> queries) { + // why adding 1? + // first slot to adjust 1-based index and + int[] result = new int[n + 1]; + Arrays.fill(result, INITIALIZER); + int maximum = INITIALIZER; + + for (List query : queries) { + int start = query.get(0); + int end = query.get(1); + int value = query.get(2); + + for (int i = start; i < end + 1; i++) { + result[i] += value; + } + + for (int current : result) { + maximum = Math.max(current, maximum); + } + } + + return maximum; + } +} diff --git a/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForceTest.java b/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForceTest.java new file mode 100644 index 0000000..df0e2aa --- /dev/null +++ b/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/arrays/CrushBruteForceTest.java @@ -0,0 +1,62 @@ +package ae.hackerrank.interview_preparation_kit.arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; + + +@TestInstance(Lifecycle.PER_CLASS) +class CrushBruteForceTest { + + public static class CrushBruteForceTestCase { + public String title; + public Integer n; + public List> queries; + public long expected; + } + + List testCases; + + @BeforeAll + public void setup() throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + + String path = String.join("/", "hackerrank", + "interview_preparation_kit", + "arrays", + "crush.testcases.json"); + File file = new File( + this.getClass() + .getClassLoader() + .getResource(path) + .getFile() + ); + + ObjectMapper mapper = new ObjectMapper(); + this.testCases = mapper.readerForListOf(CrushBruteForceTestCase.class) + .readValue(objectMapper.readTree(file)); + } + + @Test void testArrayManipulation() { + for (CrushBruteForceTestCase testCase : testCases) { + long solutionFound = CrushBruteForce + .arrayManipulation(testCase.n, testCase.queries); + + assertEquals(testCase.expected, solutionFound, + String.format("%s(%d, %s) answer must be: %s", + "CrushBruteForce.arrayManipulation", + testCase.n, + testCase.queries.toString(), + testCase.expected + ) + ); + } + } +}