- 题目描述
- 解题思路
- 执行结果
题目描述
-
三角形的最大周长
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:nums = [2,1,2] 输出:5 解释:你可以用三个边长组成一个三角形:1 2 2。 示例 2:
输入:nums = [1,2,1,10] 输出:0 解释: 你不能用边长 1,1,2 来组成三角形。 不能用边长 1,1,10 来构成三角形。 不能用边长 1、2 和 10 来构成三角形。 因为我们不能用任何三条边长来构成一个非零面积的三角形,所以我们返回 0。
提示:
3 <= nums.length <= 104 1 <= nums[i] <= 106
解题思路
法1
排序:
-
对数组进行排序
-
从后到前进行遍历,取相邻三个数,判断是否能构成三角形,
-
如果可以构成三角形,就输出三个数的和;如果不能就继续向前遍历.直到完全遍历数组,没有输出0
-
时间复杂度(O(nlogn)) -
空间复杂度(O(1))
执行结果
法1
首先对输入数组 nums 进行排序。
然后从数组的末尾开始,依次取三个数,判断它们是否可以组成一个面积不为零的三角形。
如果可以,就返回它们的和作为最大周长;如果找不到符合条件的三个数,就返回0。
func largestPerimeter(nums []int) int {
sort.Ints(nums) // 将数组按照从小到大的顺序排序
n := len(nums)
for i := n - 1; i >= 2; i-- {
if nums[i-2]+nums[i-1] > nums[i] {
return nums[i-2] + nums[i-1] + nums[i] // 找到最大周长的三角形
}
}
return 0 // 无法形成面积不为零的三角形
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 32 ms , 在所有 Go 提交中击败了 94.25% 的用户 内存消耗: 6.3 MB , 在所有 Go 提交中击败了 100.00% 的用户 通过测试用例: 84 / 84 炫耀一下:
本文由 mdnice 多平台发布