力扣刷题系列-面试题 17.16. 按摩师

it2024-11-10  15

力扣刷题系列-面试题 17.16. 按摩师

题干题目分析代码实现

题干

原题链接

题目分析

本题是一道简单的动态规划,有点类似于力扣中的打家劫舍和爬楼梯因为不能接受相邻的预约,又要求出最大值,因此状态设计为当前总预约的最大值dp[i],dp[i]只能是由dp[i-2]+nums[i]或者dp[i-1]得来,所以得出状态方程:

dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])

该算法从时间上看只需要遍历一次数组,所以时间复杂度为O(n),状态数组也可以直接在原数组上修改,所以空间复杂度为O(1)

代码实现

class Solution { public int massage(int[] nums) { if(nums.length == 0){ return 0; } if(nums.length == 1){ return nums[0]; } nums[1] = Math.max(nums[0],nums[1]); for(int i = 2; i < nums.length; ++i){ nums[i] = Math.max(nums[i - 2] + nums[i], nums[i - 1]); } return nums[nums.length - 1]; } }
最新回复(0)