package leetcode.sort;
import java.util.Arrays;
/**
* @Description: 三角形最大周长
* 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:[2,1,2]
输出:5
示例 2:
输入:[1,2,1]
输出:0
示例 3:
输入:[3,2,3,4]
输出:10
示例 4:
输入:[3,6,2,3]
输出:8
提示:
3 <= A.length <= 10000
1 <= A[i] <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-perimeter-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public class lab976 {
public static void main(String[] args) {
int in[] = {1,2,2,4,18,8};
System.out.println(largestPerimeter(in));
}
/**
* @Description: 时间复杂度:O(nlogn) 空间复杂度O(1)
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
// public int largestPerimeter(int[] A) { //排序,找出最大的三个值,比较较短的两条边相加是否大于最长边,从后向前,找出最大周长
// Arrays.sort(A);
// int length = A.length;
// int i;
// for(i=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;
// }
/**
* @Description: 时间复杂度O(n^2) 空间复杂度O(1)
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
// public int largestPerimeter(int[] A) { //利用简单选择,找最大值,冒泡到三个先找一次成立,比较简便
// int length = A.length;
// int i, j,temp;
// for (i = 0; i < length - 1; i++) {
// for (j = i + 1; j < length; j++) {
// if(A[i]<A[j]){
// temp=A[j];
// A[j]=A[i];
// A[i]=temp;
// }
// }
// if(i>=2){
// if(A[i]+A[i-1]>A[i-2]){
// return A[i]+A[i-1]+A[i-2];
// }
// }
// }
// if(A[length-1]+A[length-2]>A[length-3]){
// return A[length-1]+A[length-2]+A[length-3];
// }
// return 0;
// }
/**
* @Description: 时间复杂度O(n^2) 空间复杂度O(1)
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public static int largestPerimeter(int[] A) { //利用冒泡,找最大值,冒泡到三个先找一次成立,比较简便
int length = A.length;
int i, j,temp;
for (i = 0; i < length - 1; i++) {
for (j = 0; j < length-1-i; j++) {
if(A[j]>A[j+1]){
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
if(i>=2){
if(A[length-1-i]+A[length-1-i+1]>A[length-1-i+2]){
return A[length-1-i]+A[length-1-i+1]+A[length-1-i+2];
}
}
}
if(A[0]+A[1]>A[2]){
return A[0]+A[1]+A[2];
}
return 0;
}
}