largest perimeter triangle

main
Jason Staten 2 years ago
parent b8c2a2e5cd
commit f27ce6893e

@ -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)
}

@ -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}))
}

@ -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
Loading…
Cancel
Save