diff --git a/algorithms-modules/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/checktargetsum/CheckTargetSum.java b/algorithms-modules/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/checktargetsum/CheckTargetSum.java new file mode 100644 index 0000000000..fdbde62301 --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/checktargetsum/CheckTargetSum.java @@ -0,0 +1,58 @@ +package com.baeldung.algorithms.checktargetsum; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class CheckTargetSum { + public boolean isTargetSumExistNaive(int[] nums, int target) { + for (int i = 0; i < nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + return true; + } + } + } + + return false; + } + + public boolean isTargetSumExistSorted(int[] nums, int target) { + Arrays.sort(nums); + + int start = 0; + int end = nums.length - 1; + + while (start < end) { + int sum = nums[start] + nums[end]; + + if (sum == target) { + return true; + } + + if (sum < target) { + start++; + } else { + end--; + } + } + + return false; + } + + public boolean isTargetSumExistHashSet(int[] nums, int target) { + Set hashSet = new HashSet<>(); + + for (int num : nums) { + int diff = target - num; + + if (hashSet.contains(diff)) { + return true; + } + + hashSet.add(num); + } + + return false; + } +} diff --git a/algorithms-modules/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/checktargetsum/CheckTargetSumUnitTest.java b/algorithms-modules/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/checktargetsum/CheckTargetSumUnitTest.java new file mode 100644 index 0000000000..ff20ce112e --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/checktargetsum/CheckTargetSumUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.algorithms.checktargetsum; + +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class CheckTargetSumUnitTest { + private CheckTargetSum checkTargetSum = new CheckTargetSum(); + + private int[] nums = new int[] { 10, 5, 15, 7, 14, 1, 9 }; + + private int existingTarget = 6; + + private int nonExistingTarget = 27; + + @Test + public void givenArrayOfIntegers_whenTargetSumNaive_thenPairExists() { + assertTrue(checkTargetSum.isTargetSumExistNaive(nums, existingTarget)); + } + + @Test + public void givenArrayOfIntegers_whenTargetSumNaive_thenPairDoesNotExists() { + assertFalse(checkTargetSum.isTargetSumExistNaive(nums, nonExistingTarget)); + } + + @Test + public void givenArrayOfIntegers_whenTargetSumSorted_thenPairExists() { + assertTrue(checkTargetSum.isTargetSumExistNaive(nums, existingTarget)); + } + + @Test + public void givenArrayOfIntegers_whenTargetSumSorted_thenPairDoesNotExists() { + assertFalse(checkTargetSum.isTargetSumExistNaive(nums, nonExistingTarget)); + } + + @Test + public void givenArrayOfIntegers_whenTargetSumHashSet_thenPairExists() { + assertTrue(checkTargetSum.isTargetSumExistNaive(nums, existingTarget)); + } + + @Test + public void givenArrayOfIntegers_whenTargetSumHashSet_thenPairDoesNotExists() { + assertFalse(checkTargetSum.isTargetSumExistNaive(nums, nonExistingTarget)); + } +}