今天写了几道数组的题目,分别是
(605)种花问题:leetcode.cn/problems/ca…
(面试17.16)按摩师:leetcode.cn/problems/th…
(11)剩最多水的容器:leetcode.cn/problems/co…
前俩道较简单,后一道中等难度。
(605)种花问题
题目如下:
其示例如下:
想种花必须连续三个0及以上,但有一种情况除外,那就是开头跟结尾连续两个0的情况; 我的想法是:数组前后插入一个“0”,方便排查特殊情况。遍历一次数组,当有连续的0时,计算出连续0的个数x,然后(x-1)/ 2向下取整得到zcount。再用n减去zcount,若n小于等于0,则返回true。
以下是我的代码:
提交记录:
(面试17.16)按摩师
题目如下:
其示例如下:
我们首先得考虑只有一个元素跟无元素的情况,用动态规划,定义一个状态数组 list,其中 list[i] 表示在第 i 个预约结束后的最长预约时间。对于每个预约请求,我们有两个选择:接受它或不接受它。如果我们接受第 i 个预约请求,则最长预约时间为 list[i-2] + nums[i],即第 i-2 个预约结束后的最长预约时间加上第 i 个预约的时间。如果我们不接受第 i 个预约请求,则最长预约时间为 list[i-1],即第 i-1 个预约结束后的最长预约时间。我们选择两者中的较大值作为 list[i] 的值。最后,我们返回 list数组的最后一个元素作为结果。
以下是我的代码:
提交记录:
(11)剩最多水的容器
题目如下:
其示例如下:
首先得考虑若直接暴力解法,时间消耗太大。在考虑是否存在更大面积这样可能性时,我们应该做好控制变量。采用双指针法,从俩头开始往中间压缩,以“牺牲短边的长度,博取存在更高高度的可能性以达到面积最大”的思想进行解题。
以下是我的代码:
提交记录: