leetcode 面试题198+17.6

该博客介绍了如何使用动态规划解决LeetCode面试中关于按摩师预约的问题。通过分析,得出动态规划状态转移方程: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]。" 111807903,10295779,Python tkinter实现俄罗斯方块基础版开发教程,"['Python', '图形界面', '游戏开发', 'tkinter']
摘要由CSDN通过智能技术生成

在这里插入图片描述
此题可用动态规划求解,原数组为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]);


}
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值