package main
import (
"fmt"
"sort"
)
func largestPerimeter(A []int) int {
sort.Ints(A)
if len(A) >= 3 {
// 等于3
if len(A) == 3 {
if A[0]+A[1] > A[2] {
return A[0] + A[1] + A[2]
} else if A[0]+A[1] <= A[2] {
return 0
}
// len大于3
} else {
for j := 0; j < len(A); j++ { //大边
for i := j; i < len(A)-1; i++ { // 2边
for k := j; k < len(A)-2; k++ { // 3边
// 两边之和大于第三边
// IntSlice 已经实现了三个Len()、Less(i, j int)、Swap(i, j int) 方法
/*
type IntSlice []int
func (p IntSlice) Len() int { return len(p) }
func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
// Sort is a convenience method.
func (p IntSlice) Sort() { Sort(p) }
*/
sort.Sort(sort.Reverse(sort.IntSlice(A)))
if A[i+1]+A[k+2] > A[j] {
return A[i+1] + A[k+2] + A[j]
}
}
}
}
}
}
// 默认return
return 0
}
func main() {
/*
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:[2,1,2]
输出:5
示例 2:
输入:[1,2,1]
输出:0
示例 3:
输入:[3,2,3,4]
输出:10
*/
var s = []int{3, 6, 2, 1, 0, 0, 0, 0}
res := largestPerimeter(s)
fmt.Println(res)
}
原文:https://www.cnblogs.com/yzg-14/p/13311341.html