leetcode 976. 三角形的最大周长

108 阅读1分钟

[toc] leetcode 976. 三角形的最大周长

题目描述

  1. 三角形的最大周长

给定由一些正数(代表长度)组成的数组 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

排序:

  1. 对数组进行排序

  2. 从后到前进行遍历,取相邻三个数,判断是否能构成三角形,

  3. 如果可以构成三角形,就输出三个数的和;如果不能就继续向前遍历.直到完全遍历数组,没有输出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多平台发布