题目
代码部分一(19ms)
class Solution {
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for(int i = A.length - 3; i >= 0; i--){
if(A[i] > A[i+1] - A[i+2] && A[i] + A[i+1] > A[i+2]){
return A[i] + A[i+1] +A[i+2];
}
}
return 0;
}
}
通过之后想看看还有什么可以改进,发现自己写了一个很蠢的东西:
三角形的判定不需要(1.任意两边之和大于第三边 2. 任意两边之差小于第三边)都判定
递减排序状态下 a、b、c
若 a + b > c 则可得 a + b - c > c - c
a + b - c - a > (-a)
b - c > (-a) -----> (b - c) * (-1) < (-a) * (-1)
即 a + b > c 则 c - b < a
所以只需要判定最大两边之和是否大于第三边(逆推不成立)
代码部分二(18ms)
class Solution {
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for(int i = A.length - 3; i >= 0; i--){
if(A[i] + A[i+1] > A[i+2]){
return A[i] + A[i+1] +A[i+2];
}
}
return 0;
}
}