【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
相关推荐
JieE21212 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack202 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2123 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2123 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术3 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦3 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050733 天前
(一)小红的数组操作
算法·编程语言