编程语言
首页 > 编程语言> > 算法题:面试题 16.11. 跳水板(题目+思路+代码+注释)简单优雅击败100%用户

算法题:面试题 16.11. 跳水板(题目+思路+代码+注释)简单优雅击败100%用户

作者:互联网

耗时1ms,击败100%用户。记忆法,时空复杂度O(n)

在这里插入图片描述

题目

面试题 16.11. 跳水板
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。

返回的长度需要从小到大排列。

示例 1

输入:
shorter = 1
longer = 2
k = 3
输出: [3,4,5,6]
解释:
可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。
提示:

0 < shorter <= longer
0 <= k <= 100000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

代码

下面代码有种代码如诗的感觉了。

 public int[] divingBoard(int shorter, int longer, int k) {
        //特殊情况直接返回
        if (k==0){
            return new int[0];
        }
        //相等只有一种可能
        if (shorter == longer){
            return new int[]{shorter*k};
        }
        //不相等有 k+1种可能,如果理解不了那这个就会成为障碍
        int[] ret = new int[k+1];
        int gap = longer - shorter;
        //从全部用最短的开始记忆,一直到全部用最长的,请注意一定要 min=shorter*k-gap,因为循环体里是 min+gap,对第一个也加了跟最长的,所以需要归位
        for (int i =0,min=shorter*k-gap;i<=k;i++){
            ret[i] = min= min+gap;
        }
        return ret;
    }

 

标签:面试题,longer,int,100%,16.11,板子,shorter,长度,gap
来源: https://blog.51cto.com/humorchen/2984245