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