Skip to main content

Find Maximum Area of a Triangle - Solution & Explanation

MediumArrayHash TableMathGreedy12 min readAsked at: Google, DocuSign
Practice this problem

Problem Statement

You are given a 2D array coords of size n x 2, representing the coordinates of n points in an infinite Cartesian plane.

Find twice the maximum area of a triangle with its corners at any three elements from coords, such that at least one side of this triangle is parallel to the x-axis or y-axis. Formally, if the maximum area of such a triangle is A, return 2 * A.

If no such triangle exists, return -1.

Note that a triangle cannot have zero area.

 

Example 1:

Input: coords = [[1,1],[1,2],[3,2],[3,3]]

Output: 2

Explanation:

The triangle shown in the image has a base 1 and height 2. Hence its area is 1/2 * base * height = 1.

Example 2:

Input: coords = [[1,1],[2,2],[3,3]]

Output: -1

Explanation:

The only possible triangle has corners (1, 1), (2, 2), and (3, 3). None of its sides are parallel to the x-axis or the y-axis.

 

Constraints:

  • 1 <= n == coords.length <= 105
  • 1 <= coords[i][0], coords[i][1] <= 106
  • All coords[i] are unique.

Approach Overview

Problem Overview: You are given a set of points on a 2D grid. The task is to choose three points that form a triangle with the maximum possible area. If no valid triangle exists, return 0. The core challenge is evaluating combinations efficiently without recomputing geometric properties repeatedly.

Approach 1: Brute Force Enumeration (O(n^3) time, O(1) space)

The most direct solution checks every combination of three points. For each triplet (i, j, k), compute the triangle area using the shoelace formula: area = |x1(y2−y3) + x2(y3−y1) + x3(y1−y2)| / 2. Track the maximum area across all triplets. This approach guarantees correctness because it evaluates every possible triangle, but the triple nested loop leads to O(n^3) time. It becomes slow once the number of points grows beyond a few hundred.

Approach 2: Enumeration + Hash Map (O(n^2) time, O(n) space)

You can reduce redundant geometric work by precomputing coordinate extremes. Use a hash table keyed by x or y coordinate to store the minimum and maximum values observed along the other axis. While enumerating pairs of points as a potential base, you can quickly look up the farthest third point that maximizes the triangle height using constant-time hash lookups. This transforms the expensive third loop into a lookup operation.

The insight comes from triangle geometry: for a fixed base, the area depends only on the perpendicular distance (height) of the third point. By storing coordinate extremes in a map, you avoid scanning all remaining points to find the maximum height. The algorithm still enumerates candidate bases in O(n^2), but determining the best third vertex becomes O(1). Total complexity becomes O(n^2) time and O(n) extra space.

This strategy mixes geometry with array enumeration. The hash structure stores geometric constraints, while the pair iteration evaluates candidate bases.

Recommended for interviews: Start with the brute force triplet enumeration to show you understand the geometric area formula. Then optimize by introducing the hash map that stores coordinate extremes. Interviewers typically expect the O(n^2) enumeration + hash map approach because it demonstrates awareness of geometric properties and efficient lookup structures.

Solution

The problem asks for twice the area of the triangle, so we can directly calculate the product of the base and height of the triangle.

Since the triangle must have at least one side parallel to the x-axis or y-axis, we can enumerate sides parallel to the x-axis and calculate the double area for all possible triangles, then swap the coordinates in coords and repeat the process to calculate the double area for triangles with sides parallel to the y-axis.

Therefore, we design a function calc to calculate the double area for all possible triangles with sides parallel to the y-axis.

We use two hash maps f and g to record the minimum and maximum y-coordinates for each x-coordinate. Then we iterate through coords, updating f and g, and also record the minimum and maximum x-coordinates. Finally, we iterate through f, calculate the double area for each x-coordinate, and update the answer.

In the main function, we first call the calc function to calculate the double area for triangles with sides parallel to the y-axis, then swap the coordinates in coords and repeat the process to calculate the double area for triangles with sides parallel to the x-axis. Finally, we return the answer; if the answer is 0, we return -1.

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

Code

Python

Java

C++

Go

TypeScript

Try this approach in the editor →

Detailed Complexity Analysis

ApproachTimeSpaceWhen to Use
Brute Force Triplet EnumerationO(n^3)O(1)Small inputs or when implementing the simplest correct solution first
Enumeration + Hash MapO(n^2)O(n)General case optimization when many points exist and repeated scans must be avoided

Video Solution

Leetcode 3588: Find Maximum Area of a Triangle | Java + Intuition + Dry Run | Biweekly Contest 159 • ExpertFunda • 564 views views

Watch 2 more video solutions →

Frequently Asked Questions

Is Find Maximum Area of a Triangle easy or hard?
This problem is typically rated Medium difficulty. The brute force idea is straightforward, but identifying how to reduce the third loop using coordinate extremes and a hash map requires understanding geometry and optimization patterns.
Find Maximum Area of a Triangle Python/Java solution
Most implementations iterate through pairs of points and use a hash map to quickly determine the farthest valid third point. The logic is identical across languages such as Python, Java, C++, Go, and TypeScript. Each version computes triangle area using a geometry formula while leveraging O(1) hash lookups.
How to solve Find Maximum Area of a Triangle in O(n^2)?
Enumerate pairs of points as a potential triangle base. Precompute minimum and maximum coordinates using a hash table so the farthest third point can be retrieved instantly. The triangle area depends on base length and perpendicular height, so the lookup provides the maximum height in O(1) time while the base enumeration takes O(n^2).
What is the best approach for Find Maximum Area of a Triangle?
The most practical approach uses enumeration combined with a hash map that stores coordinate extremes. Instead of checking every possible third point for a base, the map allows constant-time lookup of the farthest candidate. This reduces the complexity from O(n^3) brute force to O(n^2) time with O(n) extra space.
Is Find Maximum Area of a Triangle asked at Google/Amazon/Meta?
Geometry and enumeration problems involving maximum area or coordinate extremes frequently appear in interviews at companies like Amazon, Google, and Meta. Variants often combine geometric formulas with hash tables or greedy observations to reduce brute force complexity.
What data structure is used in Find Maximum Area of a Triangle?
A hash table is commonly used to store coordinate extremes such as the minimum and maximum values for a given x or y coordinate. This allows constant-time lookups when evaluating candidate triangle bases, making the optimized approach significantly faster than pure enumeration.
What is the time complexity of Find Maximum Area of a Triangle?
The brute force approach checks every triplet of points and runs in O(n^3) time. The optimized enumeration + hash map solution reduces the complexity to O(n^2) by replacing the third loop with constant-time lookups. Space complexity is O(n) for storing coordinate extremes.

Ready to solve this problem?

Practice Find Maximum Area of a Triangle with our built-in code editor and test cases.

Practice on FleetCode