From f27ce6893ecd50ba32876e23434b4d21755687f2 Mon Sep 17 00:00:00 2001 From: Jason Staten Date: Wed, 12 Oct 2022 14:50:47 -0600 Subject: [PATCH] largest perimeter triangle --- largestperimeter/largestperimeter.go | 27 ++++++++++++++++++++++ largestperimeter/largestperimeter_test.go | 28 +++++++++++++++++++++++ largestperimeter/readme.md | 23 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 largestperimeter/largestperimeter.go create mode 100644 largestperimeter/largestperimeter_test.go create mode 100644 largestperimeter/readme.md diff --git a/largestperimeter/largestperimeter.go b/largestperimeter/largestperimeter.go new file mode 100644 index 0000000..f523857 --- /dev/null +++ b/largestperimeter/largestperimeter.go @@ -0,0 +1,27 @@ +package largestperimeter + +import ( + "sort" +) + +func isTriangle(a, b, c int) bool { + return a < b+c +} + +func largestPerimeter(nums []int) int { + + sort.Ints(nums) + + for i := len(nums) - 1; i >= 2; i-- { + a, b, c := nums[i], nums[i-1], nums[i-2] + if isTriangle(a, b, c) { + return a + b + c + } + } + + return 0 +} + +func Triangle(nums []int) int { + return largestPerimeter(nums) +} diff --git a/largestperimeter/largestperimeter_test.go b/largestperimeter/largestperimeter_test.go new file mode 100644 index 0000000..9260c11 --- /dev/null +++ b/largestperimeter/largestperimeter_test.go @@ -0,0 +1,28 @@ +package largestperimeter_test + +import ( + "testing" + + "git.jxs.me/leetgo/largestperimeter" + "github.com/stretchr/testify/require" +) + +func TestEmpty(t *testing.T) { + require.Equal(t, 0, largestperimeter.Triangle([]int{})) +} + +func TestTooSmall(t *testing.T) { + require.Equal(t, 0, largestperimeter.Triangle([]int{1, 2})) +} + +func TestWorking(t *testing.T) { + require.Equal(t, 5, largestperimeter.Triangle([]int{2, 1, 2})) +} + +func TestInvalid(t *testing.T) { + require.Equal(t, 0, largestperimeter.Triangle([]int{2, 1, 1})) +} + +func TestHundredSize(t *testing.T) { + require.Equal(t, 118, largestperimeter.Triangle([]int{100, 49, 50, 7, 19})) +} diff --git a/largestperimeter/readme.md b/largestperimeter/readme.md new file mode 100644 index 0000000..ab11bbb --- /dev/null +++ b/largestperimeter/readme.md @@ -0,0 +1,23 @@ +976. Largest Perimeter Triangle +Easy + +Given an integer array nums, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0. + + + +Example 1: + +Input: nums = [2,1,2] +Output: 5 + +Example 2: + +Input: nums = [1,2,1] +Output: 0 + + + +Constraints: + + 3 <= nums.length <= 104 + 1 <= nums[i] <= 106 \ No newline at end of file