列表

详情


100340. 三角形的最大高度

给你两个整数 redblue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行有 1 个球,第 2 行有 2 个球,第 3 行有 3 个球,依此类推。

每一行的球必须是 相同 颜色,且相邻行的颜色必须 不同

返回可以实现的三角形的 最大 高度。

 

示例 1:

输入: red = 2, blue = 4

输出: 3

解释:

上图显示了唯一可能的排列方式。

示例 2:

输入: red = 2, blue = 1

输出: 2

解释:


上图显示了唯一可能的排列方式。

示例 3:

输入: red = 1, blue = 1

输出: 1

示例 4:

输入: red = 10, blue = 1

输出: 2

解释:


上图显示了唯一可能的排列方式。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxHeightOfTriangle(int red, int blue) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2024-10-15 09:14:19

func maxHeightOfTriangle(red int, blue int) int {
    cnt := [2]int{0, 0}  // 分别记录偶数行和奇数行分别放了多少个球
    i := 1
    for {
        cnt[i%2] += i
        if (cnt[0] > red || cnt[1] > blue) && (cnt[0] > blue || cnt[1] > red) {
            return i - 1
        }
        i++
    }
}

python3 解法, 执行用时: 39 ms, 内存消耗: 16.3 MB, 提交时间: 2024-10-15 09:10:58

# 枚举
class Solution:
    def maxHeightOfTriangle(self, red: int, blue: int) -> int:
        cnt = [0, 0]  # 分别记录偶数行和奇数行分别放了多少个球
        for i in count(1):
            cnt[i % 2] += i
            if (cnt[0] > red or cnt[1] > blue) and (cnt[0] > blue or cnt[1] > red):
                return i - 1

java 解法, 执行用时: 0 ms, 内存消耗: 39.9 MB, 提交时间: 2024-07-01 09:13:04

class Solution {
    public int maxHeightOfTriangle(int red, int blue) {
        return Math.max(f(red, blue), f(blue, red));
    }

    private int f(int n, int m) {
        int odd = (int) Math.sqrt(n);
        int even = (int) ((Math.sqrt(m * 4 + 1) - 1) / 2);
        return odd > even ? even * 2 + 1 : odd * 2;
    }
}

cpp 解法, 执行用时: 0 ms, 内存消耗: 7.3 MB, 提交时间: 2024-07-01 09:12:51

class Solution {
    int f(int n, int m) {
        int odd = sqrt(n);
        int even = (sqrt(m * 4 + 1) - 1) / 2;
        return odd > even ? even * 2 + 1 : odd * 2;
    }

public:
    int maxHeightOfTriangle(int red, int blue) {
        return max(f(red, blue), f(blue, red));
    }
};

golang 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2024-07-01 09:12:30

func f(n, m int) int {
	odd := int(math.Sqrt(float64(n)))
	even := int((math.Sqrt(float64(m*4+1)) - 1) / 2)
	if odd > even {
		return even*2 + 1
	}
	return odd * 2
}

func maxHeightOfTriangle(red, blue int) int {
	return max(f(red, blue), f(blue, red))
}

python3 解法, 执行用时: 45 ms, 内存消耗: 16.3 MB, 提交时间: 2024-07-01 09:12:17

class Solution:
    '''
    奇数行放红球,偶数行放蓝球;或者奇数行放蓝球,偶数行放红球。
    计算最多能放多少排。两种情况取最大值。
    '''
    def maxHeightOfTriangle(self, red: int, blue: int) -> int:
        def f(n: int, m: int) -> int:
            odd = isqrt(n)
            even = int((sqrt(m * 4 + 1) - 1) / 2)
            return even * 2 + 1 if odd > even else odd * 2
        return max(f(red, blue), f(blue, red))

上一题