给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:nums = [2,1,2]
输出:5
示例 2:
输入:nums = [1,2,1]
输出:0
import java.util.Arrays;
import java.util.Scanner;
/*
给定由一些正数(代表长度)组成的数组 nums,返回 由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0。
示例 1:
输入:nums = [2,1,2]
输出:5
示例 2:
输入:nums = [1,2,1]
输出:0
*/
public class 贪心算法_三角形最长周长 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//输入数组长度
int []nums=new int[n];
for(int i=0;i<nums.length;i++) {
nums[i]=sc.nextInt();//输入数组元素
}
System.out.println(largestPerimeter(nums));
sc.close();
}
public static int largestPerimeter(int[] nums) {
Arrays.sort(nums);//快排,升序
for(int i=nums.length-1;i>=2;--i) {//倒序
if((nums[i-1]+nums[i-2])>nums[i]) {//如果第二大的数加第三大的数比最大的数大,一直找最大的两个数相加,即找到局部最优解,便是贪心算法
return nums[i-1]+nums[i-2]+nums[i];//则返回这个最长周长
}
}
return 0;//如果不能形成任何面积不为零的三角形,返回0。
}
}