88、动态规划-乘积最大子数组

devtools/2024/10/19 17:44:06/

 思路:

首先使用递归来解,从0开始到N,每次都从index开始到N的求出最大值。然后再次递归index+1到N的最大值,再求max。代码如下:

  // 方法一:使用递归方式找出最大乘积public static int maxProduct(int[] nums) {// 检查输入的数组是否为空if (nums == null || nums.length == 0) {return 0;}int N = nums.length;// 从数组的第一个元素开始递归处理return process(nums, 0, N);}// 辅助递归函数private static int process(int[] nums, int index, int N) {// 递归的终止条件:当处理到数组的最后一个元素时,返回该元素if (index == N - 1) {return nums[index];}int max = nums[index]; // 当前位置的最大乘积初始化为当前元素int cur = nums[index]; // 当前乘积// 计算从index开始所有可能的子数组乘积for (int i = index + 1; i < N; i++) {cur = cur * nums[i];max = Math.max(max, cur);}// 返回当前计算的最大值与递归调用下一个元素的结果的最大值return Math.max(max, process(nums, index + 1, N));}

第二种方法:

使用动态规划

public static int maxProduct(int[] nums) {// 检查输入数组是否为空if (nums == null || nums.length == 0) {return 0;}int N = nums.length;int[] dp = new int[N + 1]; // 创建DP数组dp[N] = Integer.MIN_VALUE; // 初始化边界条件dp[N - 1] = nums[N - 1]; // 最后一个元素的最大乘积是其自身// 从后向前遍历数组for (int index = N - 1; index >= 0; index--) {int cur = nums[index];dp[index] = Math.max(cur, dp[index + 1]);for (int i = index + 1; i < N; i++) {cur = cur * nums[i];dp[index] = Math.max(dp[index], cur);}}return dp[0]; // 返回整个数组的最大子数组乘积}

第三种方法 一次for循环,代码如下:

// 方法三:优化的动态规划解法(一次遍历)public static int maxProduct(int[] nums) {// 检查数组是否为空if (nums == null || nums.length == 0) {return 0;}int max = nums[0], min = nums[0], result = nums[0]; // 初始化最大值、最小值和结果// 遍历数组元素for (int i = 1; i < nums.length; i++) {// 如果当前数是负数,交换最大值和最小值if (nums[i] < 0) {int temp = max;max = min;min = temp;}// 更新到当前位置的最大值和最小值max = Math.max(nums[i], max * nums[i]);min = Math.min(nums[i], min * nums[i]);// 更新全局最大乘积结果result = Math.max(result, max);}return result; // 返回结果}


http://www.ppmy.cn/devtools/34270.html

相关文章

福建省工程系列职称评审条件

福建省工程系列职称评审条件评审工作的通知关于印发《福建省工程系列职称评审条件》的通知_政策法规_省工信厅类别应具备的条件工程师&#xff08;一&#xff09;具备博士学位&#xff1b;或具备硕士学位或第二学士学位&#xff0c;取得助理工程师职称后&#xff0c;从事技术工…

Spring Boot应用部署 - Tomcat容器替换为Jetty容器

Jetty和Tomcat容器对比 Tomcat和Jetty都是一种Servlet引擎&#xff0c;他们都支持标准的servlet规范和JavaEE的规范。 Jetty更轻量级。这是相对Tomcat而言的。 Jetty更灵活。 Jetty更满足公有云的分布式环境的需求&#xff0c;而Tomcat更符合企业级环境。 Tomcat容器替换为…

【精】hadoop、HIVE大数据从0到1部署及应用实战

目录 基本概念 Hadoop生态 HIVE hdfs(hadoop成员) yarn(hadoop成员) MapReduce(hadoop成员) spark flink storm HBase kafka ES 实战 安装并配置hadoop 环境准备 准备虚拟机 安装ssh并设置免密登录 安装jdk 安装、配置并启动hadoop 添加hadoop环境变量&…

Markdown语法-Mermaid和Flowchart流程图

流程图 一、Mermaid流程图二、Flowchart流程图 一、Mermaid流程图 mermaid flowchat st>start: 开始 e>end: 结束 op>operation: 我的操作 cond>condition: 确认&#xff1f; st->op->cond cond(yes)->e cond(no)->opCreated with Raphal 2.3.0 开始 …

ip ssl证书无限端口网站

IP SSL证书是由CA认证机构颁发的一种特殊数字证书。大部分SSL数字证书都需要用户使用域名进行申请&#xff0c;想要对公网IP地址加密实现https访问就需要申请IP SSL证书。IP SSL证书采用了强大的加密算法&#xff0c;可以有效地防止数据在传输过程中被窃取或篡改&#xff0c;具…

Objective-C高级特性浅析与实践指南

OC的学习笔记&#xff08;二&#xff09; 文章目录 OC的学习笔记&#xff08;二&#xff09;property访问控制符点语法 自定义init方法内存管理retain 和 release class处理发生异常的方法NSSrting的常用方法类方法对象方法lengthcharacterAtIndexisEuqalStringcompare autorel…

https自签名ssl证书生成流程

准备工作&#xff1a; 0.安装完整版的openssl openssl下载官网 安装到C:\OpenSSL32&#xff0c;也可以安装到其它盘&#xff0c;不要包含空格和中文 打开openssl.exe所在目录如:C:\OpenSSL32\bin&#xff0c;输入cmd.exe打开cmd控制台 1.创建ca文件夹 ,证书文件夹 mkdir …

jvm重要参数可视化和线上问题排查

jvm重要参数可视化和线上问题排查 目标jvm参数分类(了解)运行时数据区相关的&#xff08;jdk1.8&#xff09;处理 OOM 相关的垃圾回收器相关的GC 日志记录相关的意义,默认值,调优原则&#xff08;重要&#xff0c; 待拆分&#xff09; 排查 OOM 流程 和 常见原因参考文章 目标 …