Find Polygon with the Largest Perimeter LeetCode
Optimal resource allocation is crucial in any problem.
Imagine you are a civil engineer tasked with planning the construction of a fence around a rectangular garden. You have a list of available fence panels, each represented by its length in meters.
For example, suppose the available fence panels are as follows:
nums = [3, 6, 2, 5, 7, 4]
In this scenario:
The fence must be constructed using the available fence panels.
Each fence panel can only be used once.
We aim to determine the largest possible
Problem statement
Given a list of integers nums , find the polygon with the largest perimeter that can be formed using the sides given.
Return the largest possible perimeter of a polygon whose sides can be formed from nums, or -1 if it is not possible to create a polygon.
Constraint
A polygon is a closed shape with at least three sides, and a rule for a valid polygon is that the length of the longest side must be smaller than the sum of the other sides.
Examples
Algorithm
To solve the problem of finding the largest perimeter of a polygon that can be formed from a given array of side lengths, our approach leverages sorting and iterative checking. By sorting the array in ascending order, we systematically evaluate each side length to determine if it can form a valid polygon based on the triangle inequality condition. This method ensures efficiency by prioritizing longer sides towards the end of the array, simplifying the process of checking if the longest side is smaller than the sum of the others.
Now, let's look at the algorithm for this approach:
Begin by sorting the array,
numsin the ascending order.Initialize two variables:
totalset to 0 andresultset to -1.Iterate through each element
numin the sorted arraynums.Check if the current element
numsatisfies the condition where it is less than the sum of the previously encountered elements. If true, this indicates a valid combination of sides.If
numforms a valid side, updateresultto the sum ofnumandtotal.Update
totalby adding the current elementnum.Upon completing the iteration through all elements, return the largest possible perimeter stored in
result.
Now, let's have a look at the illustration below for better understanding.
Code
Let's implement our approach in Python!
def largest_perimeter(nums):nums.sort()total = 0result = -1for num in nums:if num < total:result = num + totaltotal += numreturn resultdef main():test_cases = [[5, 5, 5],[1, 12, 1, 2, 5, 50, 3],[5, 5, 50],[3, 6, 2, 3],[2, 2, 1, 5, 5, 3]]for i, nums in enumerate(test_cases):result = largest_perimeter(nums)print(f"Example {i + 1}: Perimeter for {nums} is {result}")if __name__ == "__main__":main()
Time complexity
The time complexity of the provided code is dominated by the sorting operation, which has a time complexity of
Space complexity
It takes n in place. The space complexity of the sorting algorithm depends on the programming language.
Free Resources