# 3200. Maximum Height of a Triangle

## Description

You are given two integers red and blue representing the count of red and blue colored balls. You have to arrange these balls to form a triangle such that the 1st row will have 1 ball, the 2nd row will have 2 balls, the 3rd row will have 3 balls, and so on.

All the balls in a particular row should be the same color, and adjacent rows should have different colors.

Return the maximum height of the triangle that can be achieved.

Example 1:

Input: red = 2, blue = 4

Output: 3

Explanation:

The only possible arrangement is shown above.

Example 2:

Input: red = 2, blue = 1

Output: 2

Explanation:

The only possible arrangement is shown above.

Example 3:

Input: red = 1, blue = 1

Output: 1

Example 4:

Input: red = 10, blue = 1

Output: 2

Explanation:

The only possible arrangement is shown above.

Constraints:

• 1 <= red, blue <= 100

## Solutions

### Solution 1: Simulation

We can enumerate the color of the first row, then simulate the construction of the triangle, calculating the maximum height.

The time complexity is $O(\sqrt{n})$, where $n$ is the number of red and blue balls. The space complexity is $O(1)$.

• class Solution {
public int maxHeightOfTriangle(int red, int blue) {
int ans = 0;
for (int k = 0; k < 2; ++k) {
int[] c = {red, blue};
for (int i = 1, j = k; i <= c[j]; j ^= 1, ++i) {
c[j] -= i;
ans = Math.max(ans, i);
}
}
return ans;
}
}

• class Solution {
public:
int maxHeightOfTriangle(int red, int blue) {
int ans = 0;
for (int k = 0; k < 2; ++k) {
int c[2] = {red, blue};
for (int i = 1, j = k; i <= c[j]; j ^= 1, ++i) {
c[j] -= i;
ans = max(ans, i);
}
}
return ans;
}
};

• class Solution:
def maxHeightOfTriangle(self, red: int, blue: int) -> int:
ans = 0
for k in range(2):
c = [red, blue]
i, j = 1, k
while i <= c[j]:
c[j] -= i
j ^= 1
ans = max(ans, i)
i += 1
return ans


• func maxHeightOfTriangle(red int, blue int) (ans int) {
for k := 0; k < 2; k++ {
c := [2]int{red, blue}
for i, j := 1, k; i <= c[j]; i, j = i+1, j^1 {
c[j] -= i
ans = max(ans, i)
}
}
return
}

• function maxHeightOfTriangle(red: number, blue: number): number {
let ans = 0;
for (let k = 0; k < 2; ++k) {
const c: [number, number] = [red, blue];
for (let i = 1, j = k; i <= c[j]; ++i, j ^= 1) {
c[j] -= i;
ans = Math.max(ans, i);
}
}
return ans;
}