当前位置: 首页 > article >正文

代码随想录:打家劫舍||

打家劫舍||

循环数组用拼接数组处理,并多起点dp,取所有结果的最大值。
class Solution {
public:
    int rob(vector<int>& nums) {
      int dp[500] ;
      int n=nums.size(); if(n==1)return nums[0];
      nums.insert(nums.end(),nums.begin(),nums.end());
      //数组倍增一下
      int result1=DP(nums,dp,0,n-2);
      int result2=DP(nums,dp,1,n-1);
      //两种情况,第一种不包括最后一个元素,第二种不包括第一个元素
      //因为成环首尾最多偷一个
       return max(result1,result2);
       //两种情况取最大值
    }
    int DP(vector<int>&nums,int dp[],int be,int en)
    {//be是起点,en是最开始对应的终点
        int ant=0;//存最终结果
        for(int i=be;i<=en;i++)
        {  
            //循环从不同起点开始,算它的最高金额
             memset(dp,0,sizeof(dp));
             //重置dp数组
             dp[i]=nums[i],dp[i+1]=max(nums[i],nums[i+1]);
             //初始化前两个元素,其实这里跟打家劫舍一代码基本没啥区别了
             for(int j=i+2;j<=i+en-be;j++)
             dp[j]=max(dp[j-2]+nums[j],dp[j-1]);
            //当前房子取或不取
            //取则+dp[j-2]
            //不取则为dp[j-1]
             ant=max(ant,dp[i+en-be]);
             //取最大金额保存
        }
        return ant;
        //返回最大金额
    }
};


http://www.kler.cn/a/316041.html

相关文章:

  • vue动态列(表头)
  • CSP/信奥赛C++语法基础刷题训练(8):洛谷P5718:找最小值
  • 工作和学习遇到的技术问题
  • 【JavaEE初阶 — 多线程】生产消费模型 阻塞队列
  • 图论-代码随想录刷题记录[JAVA]
  • 【Excel】身份证号最后一位“X”怎么计算
  • 鸿蒙OpenHarmony【轻量系统内核扩展组件(CPU占用率)】子系统开发
  • 【C++】面向对象编程的三大特性:深入解析继承机制
  • Open3D(C++) 基于点云的曲率提取特征点(自定义阈值法)
  • Unity DOTS系列之IJobChunk来迭代处理数据
  • 速盾:高防cdn防御的时候会封ip吗?
  • GPTo1论文详解
  • ICML 2024 论文分享┆用于高分辨率图像合成的可扩展修正流Transformers
  • 深度学习与应用:行人跟踪
  • 使用Docker快速搭建Airflow+MySQL详细教程
  • 【Linux篇】常用命令及操作技巧(基础篇)
  • IM项目-----消息转发子服务
  • 开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界-集成vLLM(二)
  • 运行在docker环境下的图片压缩小工具
  • Qt集成Direct2D绘制,实现离屏渲染
  • OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【SHELL】
  • ARM中的寄存器
  • Zabbix 6.4添加中文语言
  • IT 人转架构设计必备:项目学习资料+视频分享,涵盖运维管理全内容
  • C++ 构造函数最佳实践
  • Jmeter压力测试-ServerAgent-2.2.3闪退问题解决