【LeetCode每日一题】LeetCode 976.三角形的最大周长

LeetCode 976.三角形的最大周长

题目描述

给定一个包含非负整数的数组 nums,其中每个元素表示一个线段的长度。你需要从中选出三个线段,组成一个三角形,使得三角形的周长最大,并返回这个最大周长。如果无法组成三角形,返回 0。

三角形成立的条件:
  • 任意两边之和大于第三边。

Java 实现代码

java 复制代码
import java.util.Arrays;

public class Solution {
    public int largestPerimeter(int[] nums) {
        // 对数组进行降序排序
        Arrays.sort(nums);
        
        // 从最大值开始检查三个边是否能组成三角形
        for (int i = nums.length - 1; i >= 2; i--) {
            if (nums[i - 2] + nums[i - 1] > nums[i]) {
                return nums[i - 2] + nums[i - 1] + nums[i];
            }
        }
        
        // 如果找不到有效的三角形,返回0
        return 0;
    }
}

解题思路

  1. 排序:首先对数组进行排序,确保最大的三条边在最后。通过排序,可以减少检查所有可能组合的次数,因为从大到小遍历,找到符合条件的三条边即可。
  2. 检查三角形成立条件 :从排序后的数组末尾开始,检查当前三条边是否能构成一个三角形,即 nums[i-2] + nums[i-1] > nums[i]。如果满足条件,返回这三条边的周长。
  3. 返回结果:如果没有找到符合条件的三条边,则返回 0。

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是数组的长度。主要由排序操作决定。
  • 空间复杂度:O(1),我们只用了常数的额外空间。

举例说明执行过程

假设输入数组 nums = [2, 1, 3, 4]

  1. 排序后的数组:[1, 2, 3, 4]

  2. 检查从后往前的三个数:

    • 第一次检查:nums[2] = 3, nums[3] = 4nums[1] = 22 + 3 > 4,符合三角形条件,返回周长 2 + 3 + 4 = 9
相关推荐
君义_noip3 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念3 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
英英_4 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
一起养小猫4 小时前
LeetCode100天Day14-轮转数组与买卖股票最佳时机
算法·leetcode·职场和发展
hele_two4 小时前
快速幂算法
c++·python·算法
l1t5 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
jllllyuz5 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论
程序员-King.6 小时前
day143—递归—对称二叉树(LeetCode-101)
数据结构·算法·leetcode·二叉树·递归
BlockChain8886 小时前
字符串最后一个单词的长度
算法·go
爱吃泡芙的小白白6 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法