【Leetcode】 213. 打家劫舍 II ?

news2024/12/29 5:06:01

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

示例 1:

输入nums = [2,3,2]
输出3
解释你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

示例 2

输入nums = [1,2,3,1]
输出4
解释你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。

示例 3:

输入nums = [1,2,3]
输出3

提示
1 <= nums.length <= 100
0 <= nums[i] <= 1000


AC:

/*
 * @lc app=leetcode.cn id=213 lang=cpp
 *
 * [213] 打家劫舍 II
 */

// @lc code=start
class Solution {
private:
    int commonRob(vector<int>& nums, int start, int end) {
        if(end - start == 0)
            return nums[start];
        vector<int> dp(nums.size());
        dp[start] = nums[start];
        dp[start + 1] = max(nums[start], nums[start + 1]);
        for(int i = start + 2; i <= end; i++) {
            dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[end];
    }
public:
    int rob(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        if(nums.size() == 1)
            return nums[0];
        int dp1 = commonRob(nums, 0, nums.size() - 2);
        int dp2 = commonRob(nums, 1, nums.size() - 1);
        return max(dp1, dp2)
    }
};
// @lc code=end

AC

RE:

/*
 * @lc app=leetcode.cn id=213 lang=cpp
 *
 * [213] 打家劫舍 II
 */

// @lc code=start
class Solution {
private:
    int commonRob(vector<int>& nums, int start, int end) {
        if(end - start == 0)
            return nums[start];
        vector<int> dp(nums.size());
        dp[start] = nums[start];
        dp[start + 1] = max(nums[start], nums[start + 1]);
        for(int i = start + 2; i <= end; i++) {
            dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[end];
    }
public:
    int rob(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        if(nums.size() == 1)
            return nums[0];
        return max(commonRob(nums, 0, nums.size() - 2), commonRob(nums, 1, nums.size()) - 1);
    }
};
// @lc code=end

RERE2
AC:

/*
 * @lc app=leetcode.cn id=213 lang=cpp
 *
 * [213] 打家劫舍 II
 */

// @lc code=start
class Solution {
private:
    int commonRob(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        if(nums.size() == 1)
            return nums[0];
        vector<int> dp(nums.size());
        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        for(int i = 2; i < nums.size(); i++) {
            dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
        }
        return dp[nums.size() - 1];
    }
public:
    int rob(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        if(nums.size() == 1)
            return nums[0];
        vector<int> nums1(nums.size() - 1);
        vector<int> nums2(nums.size() - 1);
        for(int i = 0; i < nums.size() - 1; i++) {
            nums1[i] = nums[i];
        }
        for(int i = 1; i < nums.size(); i++) {
            nums2[i - 1] = nums[i];
        }
        return max(commonRob(nums1), commonRob(nums2));
    }
};
// @lc code=end

AC2

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

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

相关文章

Java反射实体组装SQL

之前在LIS.Core定义了实体特性&#xff0c;在LIS.Model给实体类加了表特性&#xff0c;属性特性&#xff0c;外键特性等。ORM要实现增删改查和查带外键的父表信息就需要解析Model的特性和实体信息组装SQL来供数据库驱动实现增删改查功能。 实现实体得到SQL的工具类&#xff0c…

视觉SLAM十四讲-第三讲三维刚体运动

什么是刚体运动以及三维空间中刚体运动描述方式有哪些&#xff1f; 两个坐标系之间的运动由一个旋转加上一个平移组成&#xff0c;这种运动称为刚体运动。描述三维空间中刚体运动的方式有旋转矩阵、旋转向量、欧拉角、四元数。 请描述左手坐标系和右手坐标系。 大拇指——y …

筹备三年,自动驾驶L3标准将至,智驾产业链的关键一跃

‍作者|张祥威 编辑|德新 多位知情人士告诉HiEV&#xff0c;智能网联汽车准入试点通知&#xff0c;乐观预计将在一个月内发布。试点的推动&#xff0c;意味着国家层面的自动驾驶L3标准随之到来。 「L3标准内容大部分与主机厂相关&#xff0c;由工信部牵头&#xff0c;找了几家…

电子企业MES管理系统体系架构与功能解析

随着科技的不断发展&#xff0c;电子企业对于生产过程的数字化需求日益增强。为了满足这一需求&#xff0c;许多企业开始引入MES&#xff08;制造执行系统&#xff09;来打造数字化车间&#xff0c;以改善车间的管理和生产等各环节。本文将详细介绍电子企业MES系统的体系架构和…

pythonselenium自动化测试实战项目

说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码&#xff0c;验证是否登录成功&#xff1b; 2.输入格式正确的用户名和不…

echarts 实现双Y轴刻度对齐

话不多说&#xff0c;直接上代码&#xff1a; min: min2, max: max2, splitNumber: 5, interval: (max2 - min2) / 5, const min1 this._getMinValue(dataArr1),min2 this._getMinValue(dataArr2),max1 this._getMaxValue(dataArr1),max2 this._getMaxValue(dataArr2); _g…

微信小程序授权登录--流程讲解

一、微信授权登录流程 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小程序内的用户体系。 步骤流程&#xff1a; 1.小程序调用wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器 2.开发者服务…

机器学习---CNN(创建和训练一个卷积神经网络并评估其性能)下

import numpy as np import matplotlib.pyplot as plt from cnn_operations import cnn_operations as cnn_opr convolutional_neural_network模块&#xff1a; 1. 卷积神经网络类 def __init__(self):# 网络的层数self.n_layers 0# list&#xff0c;网络中的各层self.layers…

v-for列表渲染

一、v-for迭代数组 <li v-for"(e,index) in emp" :key"e.id">编号{{index1}} 名字{{e.name}} 年龄{{e.age}} </li> e 是循环数组中的每个元素的别名index 是当前循环的下表&#xff0c;从0开始:key 的作用&#xff1a; 是为了给 Vue 一个提示…

1100*B. GCD Length(构造GCD)

Problem - 1511B - Codeforces 解析&#xff1a; 首先构造 z&#xff0c;可以构造成 10^(c - 1) 次方&#xff0c;这样一定满足c位 然后构造x和y&#xff0c;显然x和y除以10^(c - 1)需要互质&#xff0c;直接找两个符合条件位数的质数即可。 #include<bits/stdc.h> usin…

UGUI自动布局Layout

一.自动布局的应用 自动布局就是自动设置若干个对象尺寸和位置的功能,在游戏中有广泛应用。做过Cocos的开发感慨到,Unity这方面甩了Cocos两条街,Rect Transform甩了一条街,Layout系列组件甩了一条街。除了各种等间距设置图片位置之外,以下应用情况经常出现 1.1 对于动态…

Java的八种基本数据类型+封装类+示例代码

Java的八种基本数据类型 一&#xff0c;介绍 为什么要使用数据类型 在Java中&#xff0c;基本数据类型是构建和操作程序的基础。这些基本类型有以下几个重要的理由为什么要使用&#xff1a; 效率&#xff1a;在Java中&#xff0c;八大基本数据类型是原始类型&#xff0c;它们…

nodejs+wasm+rust debug及性能分析

文章目录 背景v8引擎自带的profilelinux的perf采集wasm三方库性能分析编译debug版本wasmrust程序debug调试异常模型正常模型结论优化 参考 Node使用火焰图优化CPU爆涨 - 掘金 【Node.js丨主题周】理解perf 与火焰图-腾讯云开发者社区-腾讯云 Easy profiling for Node.js Applic…

Nature子刊|3D视角看肠道菌群空间结构

人肠道菌群不仅种类复杂&#xff0c;且在肠道中有特异的组织结构&#xff0c;这些组织结构对肠道菌群的功能和宿主的健康具有重要的作用。目前对肠道菌群组成的研究已经比较多&#xff0c;但菌群的空间组织结构研究尚浅。今天给大家分享一篇发表在Nature Communications的最新研…

哪些洗地机比较好?清洁力强的洗地机

洗地机是当代先进的科技清洁产品&#xff0c;拥有出色的清洁效果&#xff0c;无论是家庭使用还是商业场所&#xff0c;洗地机都能轻松应对各种地面类型和污渍。不仅如此&#xff0c;洗地机经过不断的迭代&#xff0c;还具有人性化的设计&#xff0c;使操作更加便捷和舒适。无论…

osg实现物体沿着控制点生成的Cardinal样条轨迹曲线运动

目录 1. 前言 2. 预备知识 3. 用osg实现三维Cardinal曲线 3.1. 工具/ 原料 3.2. 代码实现 4. 说明 1. 前言 在设计矢量图案的时候&#xff0c;我们常常需要用到曲线来表达物体造型&#xff0c;单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这样的方法&#xff1a;…

ChatGPT AIGC 人工智能Excel计算业绩提成

公司业绩提成是一种激励措施,通常是指根据公司的业绩表现,对员工的绩效进行评估,然后给予相应的奖励或提成。 这种激励措施可以鼓励员工努力工作,提高团队的竞争力和生产效率,从而推动公司的业绩增长。 不过具体的提成计算方式和金额是根据公司政策和个人表现而定的。 …

[java进阶]——线程池的使用,自定义线程池

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、线程池的存在意义 二、线程池的使用 2.1线程池的核心原理 2.2线程池的代码实现 三、自定义线程池 3.1线程池的参数详解 3.2线程池的执行原理 3.3灵魂两问 3.4线程池多大合适 3.5拒绝策略 一、线程池…

基于springboot实现分布式架构网上商城管理系统项目【项目源码+论文说明】计算机毕业设计

基于springcloud实现分布式架构网上商城演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

linux进程管理,一个进程的一生(喂饭级教学)

这篇文章谈谈linux中的进程管理。 一周爆肝&#xff0c;创作不易&#xff0c;望支持&#xff01; 希望对大家有所帮助&#xff01;记得收藏&#xff01; 要理解进程管理&#xff0c;重要的是周边问题&#xff0c;一定要知其然&#xff0c;知其所以然。看下方目录就知道都是干货…