此题可用动态规划求解,原数组为b[],我们用一个二维数组a[][2]来表示当前是否预约到客人,a[][0]就表示当前没有接预约,a[0][1]则表示接到预约,分析一下,对于按摩师来说 如果当前接到预约,那么则说明上一个是一定没有预约的,那么此时总预约时间最长应该为当前预约时间+上一个没有预约到的时间,即为a[i][1]=b[i]+a[i-1][0].如果当前没有接到预约,则上一个可能预约也可能没有预约,我们取两者最大值作为最大总预约时间,即a[i][0]=max(a[i-1][0],a[i-1][1]).边界条件为a[0][0]=0,a[0][1]=b[0].
package leetcode;
public class leetcode198 {
public static void main(String[] args) {
int a[]={2,7,9,3,1};
l l1=new l();
System.out.println(l1.rob(a));
}
}
class l{
public int rob(int[] nums) {
if(nums.length==0){
return 0;
}
else if(nums.length==1){
return nums[0];
}
else{
int b[][]=new int[nums.length][2];//用二维数组表示当前预约情况 b[i][0]表示当前未预约,b[i][1]表示当前预约成功.
b[0][0]=0;//边界条件
b[0][1]=nums[0];
for(int i=1;i<nums.length;i++)
{
b[i][0]=Math.max(b[i-1][0],b[i-1][1]);//上文提到 不再过多解释
b[i][1]=nums[i]+b[i-1][0];
}
return Math.max(b[nums.length-1][0],b[nums.length-1][1]);
}
}
}