贪心 排个序,贪最大边长,从后往前考虑,先确定最长一条边,往前找另外两条小边,但好像又陷入了随机选取方案,后来发现考虑两条小边的相对位置是多余的,若随机分布了a<b<c<d<e<f; 当选了大边f,最有可能的两条小边就是相邻的d和e,因为如果选了a和b,或a和c等等 可以组成三角形的话,a+b < d+e,那么d和e一定更加是最优解,所以从后往前选取相邻的三条即可,找到即是最大的。排序复杂度用了
n = 5a_list = [2, 3, 4, 5, 10]def solve():sorted_list = sorted(a_list)list_len = len(sorted_list)ans = 0for i in range(list_len-1, 1, -1):triangle_len = sorted_list[i] + sorted_list[i-1] + sorted_list[i-2]if sorted_list[i-1] + sorted_list[i-2] > sorted_list[i]:ans = triangle_lenbreakreturn ansif __name__ == '__main__':print(solve())
