news 2026/9/12 10:19:37

贪心题目:三角形的最大周长

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心题目:三角形的最大周长

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:三角形的最大周长

出处:976. 三角形的最大周长

难度

3 级

题目描述

要求

给定一个整数数组nums \texttt{nums}nums,返回从该数组中取出三个元素作为边长的面积不为零的最大三角形周长。如果不能形成任何面积不为零的三角形,返回0 \texttt{0}0

示例

示例 1:

输入:nums = [2,1,2] \texttt{nums = [2,1,2]}nums = [2,1,2]
输出:5 \texttt{5}5

示例 2:

输入:nums = [1,2,1] \texttt{nums = [1,2,1]}nums = [1,2,1]
输出:0 \texttt{0}0

数据范围

  • 3 ≤ nums.length ≤ 10 4 \texttt{3} \le \texttt{nums.length} \le \texttt{10}^\texttt{4}3nums.length104
  • 1 ≤ nums[i] ≤ 10 6 \texttt{1} \le \texttt{nums[i]} \le \texttt{10}^\texttt{6}1nums[i]106

解法

思路和算法

由于整数数组nums \textit{nums}nums中的所有元素都大于零,因此数组nums \textit{nums}nums中的所有元素都是正整数。

三个正整数可以组成三角形的三条边的边长,等价于其中两个较小的正整数之和大于最大的正整数。用a aab bbc cc表示三角形的三条边的边长,其中a ≤ b ≤ c a \le b \le cabc,则应满足a + b > c a + b > ca+b>c。为方便处理,首先将数组nums \textit{nums}nums按升序排序。

当最大边长c cc确定时,为了使三角形的周长最大,a aab bb应取最大值。对于i ≥ 2 i \ge 2i2,当c = nums [ i ] c = \textit{nums}[i]c=nums[i]时,应取b = nums [ i − 1 ] b = \textit{nums}[i - 1]b=nums[i1]a = nums [ i − 2 ] a = \textit{nums}[i - 2]a=nums[i2]。如果此时a + b > c a + b > ca+b>c,则三角形的最大周长为a + b + c a + b + ca+b+c。如果此时a + b ≤ c a + b \le ca+bc,则a aab bb不能取更大值,如果将a aab bb换成a ′ a'ab ′ b'b,则必有a ′ ≤ a a' \le aaab ′ ≤ b b' \le bbba ′ + b ′ ≤ a + b ≤ c a' + b' \le a + b \le ca+ba+bc,因此不存在以c cc为最大边长的三角形。

根据上述分析,可以使用贪心的思想计算最大三角形周长。

具体做法是,首先将数组nums \textit{nums}nums按升序排序,然后反向遍历数组nums \textit{nums}nums,判断每组相邻三个元素是否可以组成三角形的三条边的边长,如果可以则将三个元素之和作为最大三角形周长返回。如果遍历结束之后仍未遇到相邻三个元素可以组成三角形的三条边的边长,则不能形成面积不为零的三角形,返回0 00

代码

classSolution{publicintlargestPerimeter(int[]nums){Arrays.sort(nums);for(inti=nums.length-3;i>=0;i--){if(nums[i]+nums[i+1]>nums[i+2]){returnnums[i]+nums[i+1]+nums[i+2];}}return0;}}

复杂度分析

  • 时间复杂度:O ( n log ⁡ n ) O(n \log n)O(nlogn),其中n nn是数组nums \textit{nums}nums的长度。排序需要O ( n log ⁡ n ) O(n \log n)O(nlogn)的时间,排序之后遍历数组需要O ( n ) O(n)O(n)的时间,因此时间复杂度是O ( n log ⁡ n ) O(n \log n)O(nlogn)

  • 空间复杂度:O ( log ⁡ n ) O(\log n)O(logn),其中n nn是数组nums \textit{nums}nums的长度。排序需要O ( log ⁡ n ) O(\log n)O(logn)的递归调用栈空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 10:19:15

Redis Lua脚本:原子操作与性能优化实战

1. Redis脚本功能概述Redis从2.6版本开始内置了Lua脚本引擎,这为Redis带来了革命性的能力扩展。脚本功能主要解决了两个核心问题:原子性执行多个命令和复杂计算下推到数据层。在实际生产环境中,我们经常遇到需要原子性执行多个Redis命令的场景…

作者头像 李华
网站建设 2026/9/12 10:18:45

地铁大数据客流分析系统架构与优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 10:18:28

2026设计趋势:智能风格统一与高效素材筛选

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 10:16:48

高职大数据技术专业就业指南与技能规划

1. 高职大数据技术专业就业全景图2026届高职大数据技术专业的同学们正站在职业选择的十字路口。作为从业十余年的数据工程师,我见证了大数据行业从萌芽到爆发的全过程。当前企业数字化转型浪潮下,大数据技术人才需求呈现"金字塔"结构&#xff…

作者头像 李华
网站建设 2026/9/12 10:16:41

C++字符串操作:模拟实现string增删查改

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华