diff --git a/src/main/java/com/leetcode/array/LargestPerimeterTriangle.java b/src/main/java/com/leetcode/array/LargestPerimeterTriangle.java new file mode 100644 index 0000000..dd4333e --- /dev/null +++ b/src/main/java/com/leetcode/array/LargestPerimeterTriangle.java @@ -0,0 +1,18 @@ +package com.leetcode.array; + +import java.util.Arrays; + +public final class LargestPerimeterTriangle { + private LargestPerimeterTriangle() { + } + + public static int largestPerimeter(int[] nums) { + Arrays.sort(nums); + for (int i = nums.length - 1; i >= 2; i--) { + if (nums[i] < nums[i - 1] + nums[i - 2]) { + return nums[i] + nums[i - 1] + nums[i - 2]; + } + } + return 0; + } +} diff --git a/src/main/java/com/leetcode/array/NearestValidPoint.java b/src/main/java/com/leetcode/array/NearestValidPoint.java new file mode 100644 index 0000000..0412e05 --- /dev/null +++ b/src/main/java/com/leetcode/array/NearestValidPoint.java @@ -0,0 +1,27 @@ +package com.leetcode.array; + +public final class NearestValidPoint { + private NearestValidPoint() { + } + + public static int nearestValidPoint(int x, int y, int[][] points) { + int index = -1; + int minDist = Integer.MAX_VALUE; + for (int i = 0; i < points.length; i++) { + int[] p = points[i]; + int dist = Integer.MAX_VALUE; + if (p[0] == x) { + dist = Math.abs(p[1] - y); + } else { + if (p[1] == y) { + dist = Math.abs(p[0] - x); + } + } + if (dist < minDist) { + minDist = dist; + index = i; + } + } + return index; + } +} diff --git a/src/test/java/com/leetcode/array/LargestPerimeterTriangleTest.java b/src/test/java/com/leetcode/array/LargestPerimeterTriangleTest.java new file mode 100644 index 0000000..3f2c0b8 --- /dev/null +++ b/src/test/java/com/leetcode/array/LargestPerimeterTriangleTest.java @@ -0,0 +1,18 @@ +package com.leetcode.array; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.converter.ConvertWith; +import org.junit.jupiter.params.provider.CsvSource; + +class LargestPerimeterTriangleTest { + + @ParameterizedTest + @CsvSource( { + "'1,2,2', 5", + "'1,2,1', 0" + }) + void testLargestPerimeter(@ConvertWith(IntArrayConverter.class) int[] arr, int expected) { + Assertions.assertEquals(expected, LargestPerimeterTriangle.largestPerimeter(arr)); + } +} diff --git a/src/test/java/com/leetcode/array/NearestValidPointTest.java b/src/test/java/com/leetcode/array/NearestValidPointTest.java new file mode 100644 index 0000000..daae4fa --- /dev/null +++ b/src/test/java/com/leetcode/array/NearestValidPointTest.java @@ -0,0 +1,23 @@ +package com.leetcode.array; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.stream.Stream; + +class NearestValidPointTest { + + static Stream testCases() { + return Stream.of( + Arguments.arguments(3, 4, new int[][] {{1, 2}, {3, 1}, {2, 4}, {2, 3}, {4, 4}}, 2) + ); + } + + @ParameterizedTest + @MethodSource("testCases") + void nearestValidPoint(int x, int y, int[][] points, int expected) { + Assertions.assertEquals(expected, NearestValidPoint.nearestValidPoint(x, y, points)); + } +}