贪心 排个序,贪最大边长,从后往前考虑,先确定最长一条边,往前找另外两条小边,但好像又陷入了随机选取方案,后来发现考虑两条小边的相对位置是多余的,若随机分布了a<b<c<d<e<f; 当选了大边f,最有可能的两条小边就是相邻的d和e,因为如果选了a和b,或a和c等等 可以组成三角形的话,a+b < d+e,那么d和e一定更加是最优解,所以从后往前选取相邻的三条即可,找到即是最大的。排序复杂度用了选择组成最大周长的三角形 - 图1

    1. n = 5
    2. a_list = [2, 3, 4, 5, 10]
    3. def solve():
    4. sorted_list = sorted(a_list)
    5. list_len = len(sorted_list)
    6. ans = 0
    7. for i in range(list_len-1, 1, -1):
    8. triangle_len = sorted_list[i] + sorted_list[i-1] + sorted_list[i-2]
    9. if sorted_list[i-1] + sorted_list[i-2] > sorted_list[i]:
    10. ans = triangle_len
    11. break
    12. return ans
    13. if __name__ == '__main__':
    14. print(solve())