这道题不难,就是记录一下第一次双百
题目描述:
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
思路:动态规划思想解决问题。从左往右依次记录每个位置的最大时间,然后当处于i位置是时,访取i-2,i-3位置的值(当然这里要注意处理下标越界问题),取出其中的较大值,与i值相加为i位置的值,直到最后一个数。
提交结果
源码
class Solution {
public int massage(int[] nums) {
if(nums.length != 0){
int[] dt = new int[nums.length];
dt[0] = nums[0];
for(int i = 1; i < nums.length; i++){
if(i - 3 >= 0){
int mid = dt[i-2] > dt[i-3]?dt[i-2]:dt[i-3];
dt[i] = nums[i] + mid;
}
else if(i - 2 >= 0){
dt[i] = nums[i] + dt[i-2];
}
else dt[i] = nums[i];
}
if(dt.length>=2)
return dt[dt.length-1] > dt[dt.length-2]?dt[dt.length-1]:dt[dt.length-2];
else return dt[dt.length-1];
}
else return 0;
}
}