原题
面试题 16.11.跳水板
2020年7月8日 每日一题
题解
方法一
很简单的数学办法,我们以短的板子为基准,那么最短的长度就是k块儿短板,之后每次减少一块短板,增加一块长板,直到长板增加到了k块(也就是短板0块儿)。
需要注意两种特殊情况,k–0以及长短板子长度相同。
本思路java代码示例:
/*
@v7fgg
执行用时:2 ms, 在所有 Java 提交中击败了96.06%的用户
内存消耗:47.8 MB, 在所有 Java 提交中击败了100.00%的用户
2020年7月8日 6:53
*/
class Solution {
public int[] divingBoard(int shorter, int longer, int k) {
if(k==0){return new int[0];}
if(shorter==longer){return new int[]{k*shorter};}
int ans[]=new int[k+1];
for(int i=0;i<=k;i++){
ans[i]=i*longer+(k-i)*shorter;
}
return ans;
}
换成递推,也就是每一次新的长度是上一个长度加上板长之差。
递推代码:
/*
@v7fgg
执行用时:2 ms, 在所有 Java 提交中击败了96.06%的用户
内存消耗:47.6 MB, 在所有 Java 提交中击败了100.00%的用户
2020年7月8日 6:58
*/
class Solution {
public int[] divingBoard(int shorter, int longer, int k) {
if(k==0){return new int[0];}
if(shorter==longer){return new int[]{k*shorter};}
int ans[]=new int[k+1];
ans[0]=k*shorter;
int cha=longer-shorter;
for(int i=1;i<=k;i++){
ans[i]=ans[i-1]+cha;
}
return ans;
}
}