原文地址: http://www.iming.top/details/6
分析如下:
给定例子: 【1,2,3,4,5,6,7,8,9,0】里面是什么不重要。
设定一个含有10位的数组,每一位代表的是到当前为止最长的的时间
dp[0] = nums[0]
dp[1] = Math.max(nums[0], nums[1])
dp[2] = Math.max(dp[0] + nums[2], dp[1]) 如果下标2被选中,那么前面一个绝对不会被选中,因此,假设本次选中了,和上一次不选中进行对比,看看谁时长比较长。
dp[3] = Math.max(dp[1] + nums[3], dp[2])
....
function massage(nums: number[]): number {
if(nums.length === 0) return 0;
if(nums.length === 1) return nums[0];
const dp = [];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1])
for(let i = 2; i < nums.length; i++) {
dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1])
}
return dp[nums.length - 1]
};