打家劫舍系列

news2024/11/19 1:33:52

class Solution {
public:
    int dp[105];
    //dp[i]表示偷取前i个房间获取的最大值
    int rob(vector<int>& nums) {
    //    // dp[i][0];不偷取第i间房,偷取前i-1间房的最大值
    //     //dp[i][1];偷取第i间房,偷取前i间房的最大值
    //     memset(dp,0,sizeof(dp));
    //     dp[0][0]=0;
    //     dp[0][1]=nums[0];
    //     for(int i=1;i<nums.size();i++){
    //             dp[i][1]=max(dp[i-1][0]+nums[i],dp[i][1]);
    //             dp[i][0]=max(dp[i][0],max(dp[i-1][0],dp[i-1][1]));

    //     }
    //     int n=nums.size()-1;
    //     return max(dp[n][0],dp[n][1]);
     memset(dp,0,sizeof(dp));
    if(nums.size()<=1) return nums[0];
    dp[0]=nums[0];
    dp[1]=max(nums[0],nums[1]);
    for(int i=2;i<nums.size();i++)
    {
        dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
    }
     int n=nums.size()-1;
    return dp[n];
    }
};

class Solution {
public:
     int dp[105];
    int rob(vector<int>& nums) {
        //考虑0——n-2
         memset(dp,0,sizeof(dp));
          int n=nums.size();
          if(n<=1)
          {
              return nums[0];
          }
         dp[0]=nums[0];
         dp[1]=nums[0];
        
         for(int i=2;i<n;i++)
         {
             if(i!=n-1)
             {
                 dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
             }
             else{
                 dp[i]=max(dp[i-1],dp[i-2]);
             }
         }    
         int res1=dp[n-1];
         memset(dp,0,sizeof(dp));
          //考虑1——n-1
         dp[0]=0;
         dp[1]=nums[1];
        for(int i=2;i<n;i++)
         {
              dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
       
             
         }
         int res=max(res1,dp[n-1]);
         return res;
    }
};

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> dfs(TreeNode* root)
    {
        vector<int>res;
        vector<int>s1(2,0);
        vector<int>s2(2,0);
        //val表示偷根节点
        int val=root->val;
        //val0表示不偷根节点
        int val0=0;
     
        if(root->left!=NULL)
        {
             s1=dfs(root->left);
             val0+=max(s1[0],s1[1]);
             val+=s1[1];
        }
        if(root->right!=NULL)
        {
            s2=dfs(root->right);
            val0+=max(s2[0],s2[1]);
            val+=s2[1];
        }
        res.push_back(val);
        res.push_back(val0);
        return res;
    }
    int rob(TreeNode* root) {
        vector<int>res;
        res= dfs(root);
        return max(res[0],res[1]);
    }
};

 

class Solution {
public:
    int dp[100005];
    int minCapability(vector<int>& nums, int k) {
        int right=*max_element(nums.begin(),nums.end());
          if(nums.size()==1)
            {
                return nums[0];
            }
        int left=0;
        while(left+1<right)
        {
            int mid=(left+right)/2;
            memset(dp,0,sizeof(dp));
            //dp[i]表示前i个房间窃取最大金额为mid的最大房间数
          
            if(nums[0]>mid)
            {
                dp[0]=0;
            }
            else{
                 dp[0]=1;
            }
            if(nums[1]<=mid && dp[0]==0)
            {
                dp[1]=1;
            }
            else{
                dp[1]=dp[0];
            }
            
            for(int i=2;i<nums.size();i++)
            {
                if(nums[i]>mid)
                {
                    dp[i]=max(dp[i-1],dp[i-2]);
                }
                else{
                    dp[i]=max(dp[i-2]+1,dp[i-1]);
                }
            }
            // int x0=0;//
            // int x1=0;//前i位取得的最大值
            // for(int i=0;i<nums.size();i++)
            // {
            //    if(nums[i]>mid) x0=x1;
            //    else{
            //        int t=x1;
            //        x1=max(x0+1,t);
            //        x0=t;
            //    }
            // }
            int x1=dp[nums.size()-1];
            if(x1>=k)
            {
                right=mid;
            }
            else{
                left=mid;
            }
        }
        return right;
        // = *max_element(nums.begin(), nums.end());
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九耶:有了 for 循环 为什么还要 forEach ?

for循环和forEach都是用于遍历数组或迭代器中的元素&#xff0c;但它们在语法和功能上有一些区别。 1. 语法不同: for循环需要手动控制迭代的起始和结束条件&#xff0c;需要编写迭代器的控制逻辑&#xff0c;而forEach则是一个数组对象的方法&#xff0c;具有更简洁的语法。 …

企业转型中,如何区别数据信息化和数字化

数据信息化是将数据转化为有用的信息&#xff0c;并通过信息技术和系统来支持决策、创新和价值创造的过程。 关于派可数据 商业智能BI可视化分析平台&#xff1a; 一、数据信息化涉及的几个方面 数据采集和整合&#xff1a;通过各种方式和渠道收集数据&#xff0c;并将不同来…

C++ 输入字符串函数cin.getline()

1.函数作用 接受一个字符串&#xff0c;可以接收空格并输出。 2.函数的完整形式 cin.getline(字符数组名,字符个数,结束标志) 第三个参数可以省略&#xff0c;当第三个参数省略之后&#xff0c;系统默认为’\0’。 若指定参数“字符个数”为n&#xff0c;则利用cout函数输出…

数据结构【绪论】

数据结构入门级 第一章绪论 什么是数据结构&#xff1f;什么是数据类型&#xff1f; 程序数据结构算法 一、基本概念&#xff1a; 数据&#xff1a;指所有能被计算机处理的&#xff0c;无论图、文字、符号等。数据元素&#xff1a;数据的基本单位&#xff0c;通常作为整体考…

一文看懂FIFO!

什么是FIFO&#xff1f; FIFO: First in, First out 代表先进的数据先出 &#xff0c;后进的数据后出。 为什么需要FIFO&#xff1f; FIFO存储器是系统的缓冲环节&#xff0c;如果没有FIFO存储器&#xff0c;整个系统就不可能正常工作。 FIFO的功能可以概括为 &#xff0…

《动手学深度学习》——第二章习题及自写答案

文章目录 2.1 数据操作练习1练习2 2.2 数据预处理练习1练习2 2.3 线性代数练习1练习2练习3练习4练习5练习6练习7练习8 2.4 微积分练习1练习2练习3练习4 2.5 自动微分练习1练习2练习3练习4练习5 2.6 概率练习1练习2练习2练习2 2.1 数据操作 练习1 运⾏本节中的代码。将本节中的…

路飞IT黑金实战项目教学

正在代理路飞IT全学科实战项目5年黑金卡 (订阅本专栏即可赠送5年黑金会员卡&#xff0c;订阅前联系博主更有折享优惠&#xff0c;每篇文章下都有联系方式) 包含Python开发、Linux云计算、前端开发、Golang开发、AI & 数据分析、网络安全、技术生涯、C语言、JAVA开发、测试…

elasticsearch查询操作(API方式)

说明&#xff1a;elasticsearch查询操作除了使用DSL语句的方式&#xff08;参考&#xff1a;http://t.csdn.cn/k7IGL&#xff09;&#xff0c;也可以使用API的方式。 准备 使用前需先导入依赖 <!--RestHighLevelClient依赖--><dependency><groupId>org.ela…

GitHub发布Copilot Chat公测版,助力开发者编写代码

近日微软GitHub推出了Copilot Chat 的公开测试版&#xff0c;而这个版本不仅仅局限于“代码缺省补充”与“代码纠错”&#xff0c;还能直接基于上文&#xff0c;自动联想出后文。 据了解&#xff0c;该AI工具主要用来助力开发者编写代码&#xff0c;可直接集成到开发者的桌面 …

如何将ubuntu LTS升级为Pro

LTS支持周期是5年&#xff1b; Pro支持周期是10年。 Ubuntu Pro专业版笔记 步骤&#xff1a; 打开“软件和更新” 可以看到最右侧的标签是Ubuntu Pro。 在没有升级之前&#xff0c;如果使用下面两步&#xff1a; sudo apt updatesudo apt upgrade 出现如下提示&#xff…

Zabbix邮件报警(163网易邮箱)

目录 一、电脑登录网易邮箱配置 二、Server端安装配置邮件服务器 邮箱查看 三、编辑zabbix_server.conf 引用邮件脚本 查看邮件 五、配置zabbix web监控项邮件报警 操作思路 Server.zabbix.com web操作 确认报警媒介信息 配置zabbix中的用户所使用的报警媒介类型以及接收邮…

AI绘画StableDiffusion实操教程:月光下的美人(含高清图片)

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 今天继续分享AI绘画实操教程&#xff0c;如何用lora包生成超真实好看质感超强的人物图片。 放大高清图已放到教程包内&#xff0c;需要的可以自取。 出图效果&#xff1a; 更多图片资源访问查看&#xff1a; 教程整合资源…

【代码随想录day20】合并二叉树

题目 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠…

Redis在云服务器上的安装与客户端连接配置

文章目录 Redis1.Redis的安装2.设置远程连接3.客户端连接3.1 客户端下载 Redis 1.Redis的安装 yum 安装 redis&#xff0c;使用以下命令&#xff0c;直接将 redis 安装到 linux 服务器&#xff1a; yum -y install redis 启动 redis使用以下命令&#xff0c;以后台运行方式启…

面试之CurrentHashMap的底层原理

首先回答HashMap的底层原理? HashMap是数组链表组成。数字组是HashMap的主体&#xff0c;链表则是主要为了解决哈希冲突而存在的。要将key 存储到&#xff08;put&#xff09;HashMap中&#xff0c;key类型实现必须计算hashcode方法&#xff0c;默认这个方法是对象的地址。接…

git账号修改密码后命令不能拉取代码,报错无权限

解决办法&#xff1a; 1.git命令 查看账号密码&#xff0c;修改密码&#xff0c;如下图 2.设置window git 凭证 3. 完成 &#xff0c;git命令拉去代码成功

九五从零开始的运维之路(其二十五)

文章目录 前言一、概述二、配置环境及搭建服务1.关闭防火墙、网络图形化工具及SElinux2.配置yum源3.测试网络连通性4.分配磁盘容量5.安装targetcli包6.服务器端进行配置7.客户端 总结 前言 本篇将简述的内容&#xff1a;Linux系统下的ISCSI服务 一、概述 iscsi全称&#xff1…

Spring Boot实践一

一、Spring Boot简介 Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它提供了一种快速、方便的方式来创建基于Spring的应用程序&#xff0c;而无需繁琐的配置。Spring Boot通过自动配置和约定大于配置的方式&#xff0c;使得开发者可以更加专注于业务逻辑的实现&…

电容笔和触控笔两者有哪些区别?比较好用的电容笔

与最初推出的那些触控笔相比&#xff0c;目前的电容笔更具有一些独特的特性&#xff0c;比如可以防止手在屏幕上误触&#xff0c;以及可以随意调节线条粗细。苹果的原装Pencil的价格目前也非常昂贵。因此&#xff0c;如果你没有足够的预算&#xff0c;那么你最好选择一支平替电…

装修行业专用装修设计施工团队工地进度小程序开发

互联网高速发展带来的就是大家越来越依赖互联网&#xff0c;从衣食住行都在向互联网整合​。传统的装修行业借助互联网也诞生了新的营销引流​方法。 以前装修房子大家都会参考邻居、朋友、亲戚&#xff0c;但现在不同了&#xff0c;互联网帮助很多人在线上了解装修公司、装修…