面试题 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 协议 ,转载请注明出处!