贪心算法求数组中能组成三角形的最大周长

题目:三角形的最大周长

给定由一些正数(代表长度)组成的数组arr,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回`0。

分析:

  • 对数组排序,再从大到小选择三个数,
  • 再判断是否能构成三角形,可以直接返回三数之和,不能就把最大的数换掉,往小数的方向继续找下一个,更新三个数的位置,继续判断,找到一个就返回
java 复制代码
import java.util.Arrays;
/**
 * @author: Arbicoral
 * @create: 2023-07-18 13:07
 * @Description: 三角形的最大周长
 */
public class GreedyByMaxPerimeter {
    public static void main(String[] args) {
        System.out.println(maxPerimeter(new int[]{3,6,2,3,8,5,9,10,1}));
    }

    private static int maxPerimeter(int[] arr) {
        Arrays.sort(arr);
        int a,b,c;// a:第三大  b:次大   c:最大
        for (int i = arr.length-1; i>1; i--) {
            c = arr[i];
            b = arr[i-1];
            a = arr[i-2];
            if (isTriangle(a,b,c)){
                System.out.println("三角形的三边分别为:"+a+"\t"+b+"\t"+c);
                return a+b+c;
            }
        }
        return -1;
    }

    /**
     * 判断 a b c 能否组成三角形,其中 a < b < c
     * 判断条件:两边之和 > 第三边
     */
    private static boolean isTriangle(int a, int b, int c) {
        return a + b > c;
    }
}
相关推荐
(●—●)橘子……3 小时前
力扣 第525场周赛 练习理解
数据结构·python·学习·算法·leetcode
Rain的Java大神之路3 小时前
LeetCode 21 合并两个有序链表:一道 Easy 题,凭什么刷掉一半候选人?
java·后端·算法
小蒋观天下3 小时前
太阳能低功耗AI相机专项:AOV值守、唤醒时序、ISP启停时序BUG
深度学习·数码相机·算法·机器学习
wenyq73 小时前
LeetCode 152. Maximum Product Subarray
java·算法·leetcode
余额瞒着我当琳3 小时前
C++异常,异常的概念,异常抛出与捕获,RAII 和智能指针的设计思路,C++标准库一些指针的使用
java·开发语言·c++·算法
2601_970703833 小时前
除湿机原理研究报告:一台机器在物理上能走多远
大数据·数据结构·算法·数据库架构·推荐算法
信奥卷王3 小时前
[GESP202312 六级] 工作沟通(含视频)
算法
♡すぎ♡4 小时前
SWE 的原理解析
算法·计算机图形学·swe
AiNightVision4 小时前
星光级 是什么?——星光级摄像机是什么?0.001Lux 照度门槛与选型真相
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
若亦_4 小时前
排序>>选择排序
数据结构·算法·排序算法