【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
相关推荐
风中的微尘1 小时前
39.网络流入门
开发语言·网络·c++·算法
西红柿维生素2 小时前
JVM相关总结
java·jvm·算法
ChillJavaGuy4 小时前
常见限流算法详解与对比
java·算法·限流算法
sali-tec4 小时前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
你怎么知道我是队长5 小时前
C语言---循环结构
c语言·开发语言·算法
艾醒5 小时前
大模型面试题剖析:RAG中的文本分割策略
人工智能·算法
纪元A梦8 小时前
贪心算法应用:K-Means++初始化详解
算法·贪心算法·kmeans
_不会dp不改名_8 小时前
leetcode_21 合并两个有序链表
算法·leetcode·链表
mark-puls8 小时前
C语言打印爱心
c语言·开发语言·算法
Python技术极客8 小时前
将 Python 应用打包成 exe 软件,仅需一行代码搞定!
算法