中等题 : 桥梁最高高度 | 豆包MarsCode AI刷题

4 阅读2分钟

题目描述

牛妹需要用 nn 根桥柱搭建一座桥,第一根桥柱和最后一根桥柱的高度已经确定,分别为 aabb。为了保证桥梁的稳固性,相邻桥柱的高度差不能超过 1。牛妹想知道,在保证稳固性的前提下,桥梁中最高的桥柱能有多高。你需要帮助牛妹计算桥梁最高的桥柱的高度。

题目分析

很明显,这一题就是一个很简单的数学题。难就是难在我们需要怎么找到它的规律。

那规律在哪里呢?

相邻桥柱的高度差不能超过 1。 这句话非常重要,也就是说相邻的两个数必须是递增,递减,亦或者是不变,而且变化不能超过 1。

既然已经知道相邻不能超过 1。那我们是不是要看起点 aa 到终点 bb 的的高度差有多少呢?那我们就用上 Math.abs(a-b),需要取绝对值。毕竟没说谁高谁低嘛。

那我们求出来我们有多少高度差能够让我们霍霍使用,那该怎么去计算呢?公式是 Math.max(a,b)+(n-1-dis)/2 记住一点,相邻差不能超过 1,每增加一个高度差,需要两个桥柱,就是要除以 2,也就是说,我们要变化一个高度,要用两个桥柱。

n - 1 - diff 是指除了第一根桥柱,再减去我们连接起点与终点需要的桥柱,就还剩下了多少桥柱给我们霍霍,剩下的再加上起始桥柱的最高高度,也就是桥梁中最高的桥柱高度。

我计算是对的但是为什么还是过不了

好问题,你做特判了吗?

其中一个样例输出了 -1,也就是说,会有不成立的情况存在。那这个样例说明了什么,原来是高度变化需要的桥柱数量多过了能够提供的数量啊。突然释怀的笑。

那不就好解决了吗,直接做一个判断,如果桥柱数量小于高度差,那就是不成立的,+1+1 是因为我们需要把起点桥柱排除。代码如下:

if(n<dis+1){
    return -1;
}

蒟蒻の代码:

public class Main {
    public static int solution(int n, int a, int b) {
        // write code here
        int dis = Math.abs(a-b);
        if(n<dis+1){
            return -1;
        }
        int maxx = Math.max(a,b)+(n-1-dis)/2;
        return maxx;
    }

    public static void main(String[] args) {
        System.out.println(solution(2, 1, 1) == 1);
        System.out.println(solution(3, 1, 1) == 2);
        System.out.println(solution(5, 3, 2) == 4);
        System.out.println(solution(5, 1, 100) == -1);
        System.out.println(solution(4, 1, 4) == 4);
    }
}