面试题 16.11. 跳水板

难度简单37收藏分享切换为英文关注反馈

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

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

示例:

输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}

提示:

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

解题思路:

​ 很简单的一道题目,题目给出k的范围是0~100000,那么就知道需要用O(n)的时间复杂度

​ 题意中只需要设置一个变量i,就可以得到shorter的数量i和longer的数量k-i,那么Length = (k - i) * shorter + i * longer;

​ 显然,这是个一次关系,变换可得 Length = (longer - shorter) * i + k * shorter;

​ 那么我们给出以下代码,便可通过测试

class Solution {
public:
    vector<int> divingBoard(int shorter, int longer, int k) {
        if(k == 0)
        {
            return vector<int>();
        }
        if(shorter == longer)
        {
            return vector<int>{longer*k};
        }
        
        vector<int> ves(k+1);
        for(int i = 0;i < ves.size();i++)
        {
            ves.at(i) = (k - i) * shorter + i * longer;
        }
        return ves;
    }
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

ACM-UCF pentastic Previous
Hello World Next