LeetCode 0976. Largest Perimeter Triangle Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0976. Largest Perimeter Triangle

Description

Given an integer array nums, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0.

 

Example 1:

Input: nums = [2,1,2]
Output: 5
Explanation: You can form a triangle with three side lengths: 1, 2, and 2.

Example 2:

Input: nums = [1,2,1,10]
Output: 0
Explanation: 
You cannot use the side lengths 1, 1, and 2 to form a triangle.
You cannot use the side lengths 1, 1, and 10 to form a triangle.
You cannot use the side lengths 1, 2, and 10 to form a triangle.
As we cannot use any three side lengths to form a triangle of non-zero area, we return 0.

 

Constraints:

  • 3 <= nums.length <= 104
  • 1 <= nums[i] <= 106

Solutions

Solution 1: Sorting + Greedy

Suppose the three sides of the triangle are a ≤ b ≤ c. The triangle has non-zero area if and only if a + b \gt c.

We can enumerate the largest side c, then select the two largest remaining sides a and b. If a + b \gt c, a triangle with non-zero area can be formed, and its perimeter will be the largest possible; otherwise, continue to enumerate the next largest side c.

The time complexity is O(n log n), and the space complexity is O(log n), where n is the length of the array nums.

PythonJavaC++GoTypeScriptRustC
class Solution: def largestPerimeter(self, nums: List[int]) -> int: nums.sort() for i in range(len(nums) - 1, 1, -1): if (c := nums[i - 1] + nums[i - 2]) > nums[i]: return c + nums[i] return 0(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !