Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题面试题16.11. 跳水板
前文
本题为leetcode数组处理类型题目,题目序号为面试题16.11,主要考察数组处理效率问题,题目链接为 https://leetcode-cn.com/problems/diving-board-lcci/。
题目信息
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
解题思路
本题目很明显是一个数据处理效率的问题。有长短两种不同的跳水板,计算在共有k根的情况下,能组成多少种长度。用一种最容易想到的思路来解释此题,也就是短板共有0-k种情况,长板对应这些种情况,组成了若干种长度。如果长短版长度不等,则只有一种结果。反之共有k+1种结果。只需要将短板数目从小到大递增,即可实现题目的结果排序要求。至此,改题目解答完毕。代码中利用map的判断存在的地方,可以用长短板是否相等进行优化,进一步提升效率。
解题代码
public int[] divingBoard(int shorter, int longer, int k) {
Map<Integer,Integer> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < k + 1; i++) {
int item = longer * i + shorter * (k - i);
if(!map.containsKey(item) && item > 0){
list.add(item);
map.put(item,1);
}
}
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。