首页 > 牛牛与三角形
头像 CodeForces爱好者
发表于 2020-12-15 21:22:00
A题:排好序后,最大值肯定是连续的3个数,这个没得说。最小值的话,一定有两条边是连续的,二分第三条边即可。而且是最长的两条边一定是连续的。 //数据:5,[1,5,6,12,12] 答案是5 //5, [2, 40, 70, 100, 101] 答案是68 #define all(x) (x).be 展开全文
头像 稀稀稀稀稀稀奇
发表于 2020-12-15 21:55:56
我的思路就是如果只有三个元素,那么一定输出为0;剩下的情况另外讨论:先给所有元素排序,周长最小的三角形就应该在排序之后前面的元素中出现;周长最大的三角形应该在排序之后后面的元素出现;所以选择先排序,然后读取前三个元素,判断是否可以构成三角形,如果可以,则退出;否则,向下读取;读取后面三个元素,如果可 展开全文
头像 MYCui_
发表于 2020-12-15 22:31:45
前言 这道题目的解法很多种,这里提供一种看似错误时间复杂度的正确做法以及证明,容我大放狂词,这是本题最优秀的算法,时间复杂度大概是O(nlog(n))瓶颈在于排序。 解法 首先把数据给出的 n 条边进行从小到大排序。 相信最大值大家都会,也就是判断第一个满足条件的 a[i] < a[i - 1 展开全文
头像 Ruoji55555
发表于 2020-12-15 23:15:39
t1 : 正确版解法 NlogN public int solve (int n, int[] a) { //先找最大 //排序后a<b<c<d<e 若 a c e 可以组成三角形(a+c > e),则cde一定可以组成三 展开全文
头像 Free的午后
发表于 2020-12-17 16:05:45
1.对数组进行一个排序,最大的三角形必定是连在一起的,从后往前遍历,找到最大的三角形2.最小的的通过二分来找,其中有两根肯定也是连续的,所以可以把长的两根固定 ,再通过二分缩小范围,找出最小的那根 public class Solution { /** * 代码中的类名、方法名、参 展开全文
头像 萌大仙
发表于 2022-03-30 00:30:44
```# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 返回在所有合法的三角形的组成中,最大的三角形的周长减去最小的三角形的周长的值 # @param n int整型 代表题目中的n # @param a int整型一维数组 代表n个数的大小 # @retur 展开全文
头像 炊烟晚霞
发表于 2020-12-15 21:46:48
牛牛与三角形 Java import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回在所有合法的三角形的组成中,最大的三角形的周长减去最小的三角形 展开全文