自学内容网 自学内容网

数学类的算法题

1. 三角形的最大高度 

​​​​​​​3200. 三角形的最大高度

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

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

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

参考题解:

class Solution {
    public int maxHeightOfTriangle(int red, int blue) {
        return compute(red,blue);
    }
    private int compute(int red,int blue){
        // 红球第一开始
        int A = (int) Math.sqrt(red);
        int B = (int) (Math.sqrt(4*blue+1)-1)/2;
        // 黑球第一开始
        int C = (int) Math.sqrt(blue);
        int D = (int) (Math.sqrt(4*red+1)-1)/2;
        // 比较两种情况最高的层数
        return Math.max(A > B ? 2*B+1 : 2*A,C > D ? 2*D+1 : 2*C);
    }
}

作者:一行代码想一天
链接:https://leetcode.cn/problems/maximum-height-of-a-triangle/solutions/2951086/shu-xue-deng-chai-shu-lie-xing-zhi-shi-j-0oid/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

交叉相减的方法

class Solution {
public:
    int maxHeightOfTriangle(int red, int blue) {
        /*
            两个整数,形成一个三角形
            可以进行尝试:分别把红,蓝作为第一个
                Case1: 假设用蓝色作为第一行元素
                然后循环 blue - 1; red - 2; blue - 3; red - 4; 如果有一次操作之后小于0了,就说明得到了相应的层次,
                Case2: 用红色球作为第一行元素
                进行同样的操作,将最后得到的两个结果进行比较
            也可以使用等差数列的计算思想
        */

        // 蓝色作为第一层
        // int count1 = maxHeight(blue,red);
        // int count2 = maxHeight(red, blue);
        // return max(count1, count2);
        // 重构
        return max(maxHeight(blue,red), maxHeight(red, blue));
    }

private:
    // 第一个参数为第一行元素颜色,第二个参数为第二行元素
    int maxHeight(int firstColor, int secondColor) {
        int count1 = 0;
        if(firstColor > 0) {
            count1 ++;
            while(true) {
                if(firstColor - count1 >= 0) {
                    firstColor -= count1;
                    count1 ++;
                }else {
                    break;
                }

                if(secondColor - count1 >= 0) {
                    secondColor -= count1;
                    count1++;
                }else {
                    break;
                }
            }
        }
        return count1 - 1;
    }
};


原文地址:https://blog.csdn.net/m0_47411815/article/details/142938797

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!