Leecode---动态规划---打家劫舍 / 乘积最大子数组

在这里插入图片描述
动态规划法
思路
(1)状态定义:dp[i]代表前i家能偷盗的最大金额
(2)状态初始化:如果只有一家,只能偷这家dp[0]=nums[0];如果有两家,因为是连通的,所以,只能偷较富的dp[i]=max(nums[1],nums[0])
(3)状态转移:如果大于等于3家,转移方程为:dp[i]=max(dp[i-1],dp[i-2]+nums[i])

class Solution
{
public:int rob(vector<int>& nums){int n = nums.size();vector<int> dp;dp.resize(n);if(n==1) return nums[0];else if(n==2) return max(nums[0],nums[1]);else{// 状态初始化dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for(int i = 2; i<n; i++){// 状态转移dp[i] = max(dp[i-1], dp[i-2] + nums[i]);}return dp[n-1];}}
};

解法二、奇偶性
思路:
设置两个变量,sumOdd 和 sumEven 分别对数组的奇数和偶数元素求和。
遍历数组,索引为奇数时,将元素加到奇数和,并与偶数和比较更新成max。
偶数和同理。
返回时进行最后一次更新max。

class solution
{
public:int rob(vector<int>& nums){int sumOdd = 0;		// 奇数和int sumEven = 0;	// 偶数和for(int i = 0; i<nums.size(); i++){if(i%2 == 0){sumEven += nums[i];sumEven = max(sumEven,sumOdd);}else{sumOdd += nums[i];sumOdd = max(sumEven,sumOdd);}}return max(sumOdd,sumEven);}
};

在这里插入图片描述

动态规划法
思路
保存当前的最大值和最小值
所有最大值中最大的那个就是结果
状态定义
dpmin[i] = 以i下标结尾的最小乘积
dpmax[i] = 以i下标结尾的最大乘积;
状态初始化

状态转移方程
1、nums[i] = 0
dpmin[i] = dpmax[i] = 0
2、nums[i] > 0
dpmax[i] = max(dpmax[i - 1] * nums[i], nums[i])
dpmin[i] = min(dpmin[i - 1] * nums[i], nums[i])
正数 * 较大值->较大值,正数 * 较小值->较小值
nums[i]要么续上之前的min或max,要么不续上,自己就是当前最大值或者最小值
3、nums[i] < 0
dpmax[i] = max(dpmin[i-1] * nums[i], nums[i])
dpmin[i] = min(dpmax[i-1] * nums[i], nums[i])
负数 * 较大值->较小值,负数 * 较小值->较大值
nums[i]要么续上之前的min或max,要么不续上,自己就是当前最大值或者最小值。

result = max(dpmax[i])

class Solution
{
public:int maxProduct(vector<int> &nums){int n = nums.size();// 数组中至少存在一个数,所以nums[0]存在// dpmin[0] = dpmax[0] = nums[0]int dpmin = nums[0], dpmax = nums[0];// result=max(dpmax[i]), 这里先令result = dpmax[0]int res = dpmax;for(int i = 1; i < n; i++){if(nums[i] == 0){dpmin = dpmax = 0;}else if(nums[i] > 0){dpmax = max(dpmax * nums[i], nums[i]);dpmin = min(dpmin * nums[i], nums[i]);}else{// tmp用来临时保存dpmaxint tmp = dpmax;dpmax = max(dpmin * nums[i], nums[i]);dpmin = min(tmp * nums[i], nums[i]);}res = max(res, dpmax);}return res;}
};

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

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

相关文章

Java基础知识点(IO流)

文章目录 序列化和反序列化IO流IO流的简介和分类Java IO流四大家族要掌握的16个流文件专属java.io.FileInputStream&#xff0c;字节输入流java.io.FileOutputStream&#xff0c;字节输出流&#xff0c;java.io.FileReader(文件字符输入流)java.io.FileWriter&#xff08;文件字…

看图猜成语微信小程序源码

后台可以自行设置关卡、等级、也可以一键部署&#xff0c; 开通流量主之后实现躺赚&#xff0c;你懂得。 个人号也可以开通&#xff0c;审核一次性必过。 类目选择 教育&#xff0c;源码仅供您参考&#xff01; 源码下载 https://download.csdn.net/download/huayula/8938579…

【计算机毕业设计】基于SSM+Vue的网上花店系统【源码+lw+部署文档】

目录 目 录 1 绪论 1.1 选题背景 1.2 选题意义 1.3 研究内容 2 系统开发技术 2.1 Java语言 2.2 SSM框架 2.3 MYSQL数据库 2.4 Vue框架 3 系统分析 3.1可行性研究 3.1.1经济可行性 3.1.2时间可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1系统易用性 3.2.2系统健壮性 3.2.3系统…

电脑没电关机,wsl和docker又挂了,附解决过程

如题&#xff0c;开了个会没带笔记本电源&#xff0c;点啊弄关机后docker打不开&#xff0c;我以为是docker坏了&#xff0c;结果docker报错&#xff1a; An unexpected error occurred while executing a WSL command. Either shut down WSL down with wsl --shutdown, and/or…

【蓝桥杯国赛】双指针

适用于以下的情境&#xff1a; ① 数组 / 字符串中&#xff0c;有多少个满足情况的连续区间。 ② 数组 / 字符串&#xff0c;合并。 【第十三届pythonB组试题&#xff1a;近似gcd】 1. 题目描述 2. 难度&#xff1a;⭐⭐⭐⭐ 3. 思考分析&#xff1a; 具体参考&#xff…

深入理解Go语言中的可比较数据类型

文章目录 前言1 可比较数据类型是什么&#xff1f;2 可比较数据类型有哪些&#xff1f;3 基本数据类型比较3.1 不同数据类型比较是无效的3.2 实现不同数据类型比较&#xff1a;转换同数据类型 4 指针数据类型比较5 接口类型比较5.1 方式1&#xff1a;设置动态数据类型和动态值5…

依据SAM大模型识别的英国农田(农业田野)边界(FIBOA)矢量数据集

简介 fiboa 是一项旨在提高农田边界数据互操作性和相关农业数据的合作计划。最近推出的 fiboa 不仅仅是一个规范&#xff0c;它还是一个全面的系统&#xff0c;包括符合规范的数据、不断完善规范的讨论以及积极促进其发展的活跃社区。本项目的重点是促进创建更多有关田地边界和…

用c语言实现简易三子棋

本篇适用于C语言初学者。 目录 完整代码&#xff1a; 分步介绍&#xff1a; 声明&#xff1a; 代码主体部分&#xff1a; 模块功能实现&#xff1a; 完整代码&#xff1a; #include<stdio.h> #include <stdlib.h> #include <time.h>#define ROW 3 #d…

黑马程序员——Spring框架——day03

目录&#xff1a; AOP AOP简介 问题导入AOP简介和作用【理解】AOP的应用场景为什么要学AOPAOP入门案例【重点】 问题导入AOP入门案例思路分析AOP入门案例实现AOP中的核心概念AOP工作流程【理解】 问题导入AOP工作流程AOP核心概念在测试类中验证代理对象AOP切入点表达式 问题导…

【python】爬虫记录每小时金价

数据来源&#xff1a; https://www.cngold.org/img_date/ 因为这个网站是数据随时变动的&#xff0c;用requests、BeautifulSoup的方式解析html的话&#xff0c;数据的位置显示的是“--”&#xff0c;并不能取到数据。 所以采用webdriver访问网站&#xff0c;然后从界面上获取…

webserver服务器从零搭建到上线(十)|⭐️EventLoop类(二)——成员方法详解

首先&#xff0c;在阅读本章之前&#xff0c;我们需要搞清楚为什么EventLoop类这么复杂 其次&#xff0c;我们还需要再强调一次关于mainLoop唤醒subLoop的流程&#xff08;可以看完该类代码后再回顾该流程&#xff09;&#xff1a; 为什么需要唤醒 subLoop? subLoop&#xff0…

C语言 指针——函数指针的典型应用:计算定积分

目录 梯形法计算函数的定积分 函数指针的典型应用 梯形法计算函数的定积分 函数指针的典型应用 用函数指针编写计算任意函数定积分的 通用 函数

15届蓝桥杯决赛,java b组,蒟蒻赛时所写的题思路

这次题的数量是10题&#xff0c;初赛是8题&#xff0c;还多了两题&#xff0c;个人感觉java b组的题意还是比较清晰的&#xff08;不存在读不懂题的情况&#xff09;&#xff0c;但是时间感觉还是不够用&#xff0c;第4题一开始不会写&#xff0c;后面记起来写到结束也没调出来…

Vivado 比特流编译时间获取以及FPGA电压温度获取(实用)

Vivado 比特流编译时间获取以及FPGA电压温度获取 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado Vivado 比特流编译时间获取以及FPGA电压温度获取一、引言二、 获取FPGA 当前程序的编译时间verilog中直接调用下面源语2. FPGA电压温度获取&#xff08;1&a…

深度学习中测量GPU性能的方式

在深度学习中&#xff0c;测量GPU性能是至关重要的步骤&#xff0c;尤其是在训练和推理过程中。以下是一些常见的测量GPU性能的方式和详细解释&#xff1a; 1. 运行时间&#xff08;Runtime&#xff09;测量 描述&#xff1a;运行时间测量是评估GPU性能的最直接方式&#xff…

es的总结

es的collapse es的collapse只能针对一个字段聚合&#xff08;针对大数据量去重&#xff09;&#xff0c;如果以age为聚合字段&#xff0c;则会展示第一条数据&#xff0c;如果需要展示多个字段&#xff0c;需要创建新的字段&#xff0c;如下 POST testleh/_update_by_query {…

信息与未来2015真题笔记

[信息与未来 2015] 加数 题目描述 给出一个正整数 n n n&#xff0c;在 n n n 的右边加入 ⌊ n 2 ⌋ \left\lfloor\dfrac n2\right\rfloor ⌊2n​⌋&#xff0c;然后在新数的右边 再加入 ⌊ ⌊ n 2 ⌋ 2 ⌋ \left\lfloor\dfrac{\left\lfloor\dfrac n2\right\rfloor}2\rig…

MyBatis:PostGreSQL的jsonb类型处理器

接前一篇《MyBatis Plus:自定义typeHandler类型处理器》,这里介绍PostGreSQL数据库的jsonb数据类型,以及如何实现jsonb类型处理器。 PostGreSQL:jsonb数据类型 json和jsonb之间的区别 PostgreSQL 提供存储JSON数据的两种类型:json 和 jsonb,两者之间的区别在于: js…

JVM学习-详解类加载器(一)

类加载器 类加载器是JVM执行类加载机制的前提 ClassLoader的作用 ClassLoader是Java的核心组件&#xff0c;所有的Class都是由ClassLoader进行加载的&#xff0c;ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部&#xff0c;转换为一个与目标类型对应的ja…

Java学习【String类详解】

Java学习【String类详解】 String的介绍及定义方式String类型的比较String类型的查找charAt()访问字符indexOf()查找下标 转化和替换数值和字符串转化大小写的转换字符串转数组格式化替换 字符串的拆分和截取split()拆分substring()截取trim()去除两边空格 StringBuilder和Stri…