【Hot100】LeetCode—152. 乘积最大子数组

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐152. 乘积最大子数组——题解思路
  • 3- ACM 实现


题目

  • 原题连接:152. 乘积最大子数组

1- 思路

动规五部曲


2- 实现

⭐152. 乘积最大子数组——题解思路

在这里插入图片描述

class Solution {public int maxProduct(int[] nums) {// 初始化答案以及以第一个元素结尾的最大和最小乘积int ans = nums[0];int max_i = nums[0];int min_i = nums[0];// 遍历数组从第二个元素开始for (int i = 1; i < nums.length; i++) {// 当 nums[i] 为负数时,max_i 和 min_i 需要交换if (nums[i] < 0) {int temp = max_i;max_i = min_i;min_i = temp;}// 更新 max_i 和 min_imax_i = Math.max(nums[i], max_i * nums[i]);min_i = Math.min(nums[i], min_i * nums[i]);// 更新答案ans = Math.max(ans, max_i);}return ans;}
}

3- ACM 实现

public class maxProduct {public static int maxProduct(int[] nums){// 1. 定义dp状态int ans = 0;// 当前最小值乘积,当前最大乘积int maxF = nums[0];int minF = nums[0];// 2.递推公式// 如果 nums[i]<0// maxF = Math.max(maxF*nums[i],nums[i]);// minF = Math.min(minF*nums[i],nums[i]);// 此时 要交换 maxF 和 minF 才能保证乘积最大for(int i = 1 ; i < nums.length;i++){if(nums[i]<0){int tmp = maxF;maxF = minF;minF = tmp;}maxF = Math.max(maxF*nums[i],nums[i]);minF = Math.min(minF*nums[i],nums[i]);ans = Math.max(ans,maxF);}return ans;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组长度");int n = sc.nextInt();int[] nums = new int[n];for(int i = 0 ; i < n;i++){nums[i] = sc.nextInt();}System.out.println("结果是"+maxProduct(nums));}
}

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

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

相关文章

windows wsl ubuntu系统安装桌面可视化

参考&#xff1a; https://www.bilibili.com/read/cv33557374/ 1&#xff09;首先先安装好wsl ubuntu系统 2&#xff09;安装 Ubuntu 桌面版 sudo apt purge -y acpid acpi-support modemmanagersudo apt-mark hold acpid acpi-support modemmanager sudo apt install ubunt…

OpenSearch 实现自动化告警

本文将介绍如何使用 Amazon OpenSearch 服务设置自动化告警,并通过 SNS、Lambda 和钉钉实现告警通知。 1. 创建 SNS 主题和订阅 首先,我们需要创建一个 SNS 主题来发送通知: 登录 AWS 控制台,进入 SNS 服务。点击"创建主题",选择标准类型,为主题命名。创建主…

等保测评与业务连续性管理:确保业务不中断的安全策略

随着信息技术的飞速发展&#xff0c;企业信息化程度不断加深&#xff0c;信息安全问题日益凸显。数据泄露、网络攻击、系统瘫痪等安全事件频发&#xff0c;不仅威胁到企业的核心资产和业务连续性&#xff0c;还可能造成重大经济损失和社会影响。因此&#xff0c;构建和完善等级…

黑马头条Day09-用户行为

一、课前准备 1. long类型精度丢失问题 解决方案&#xff1a; 当后端响应给前端的数据中包含了id或者特殊标识&#xff08;可自定义&#xff09;的时候&#xff0c;把当前数据进行转换为String类型当前端传递给后端的dto中有id或者特殊标识&#xff08;可自定义&#xff09;的…

SSH跨操作系统免密文件传输

目录 一、Windows如何通过SSH向Linux系统传输文件 1.1. 安装SSH客户端&#xff1a; 1.2. 配置WinSCP&#xff1a; 1.3. 传输文件&#xff1a; 1.4. 文件传输免输入密码、RSA公钥设置流程 二、Linux系统之间的文件传输 2.1. 使用scp命令&#xff1a; 2.2. 从远程服务器下…

Windows环境下安装docker、配置Ubuntu容器并使用vscode ssh连接到容器

目录 一、Windows环境下安装docker二、配置Ubuntu三、在容器中安装ssh服务参考文章 一、Windows环境下安装docker 在任务栏中搜索**“Windows功能”** -将适用于Linux的Windows子系统和虚拟机平台选上 然后按照提示重启电脑。然后开始安装WSL。通过cmd以管理员身份打开命令提…

OSPF概述

OSPF OSPF属于内部网关路由协议【IGP】 用于单一自治系统【Autonomous System-AS】内决策路由 自治系统【AS】 执行统一路由策略的一组网络设备的组合 OSPF概述 为了适应大型的网络&#xff0c;OSPF在AS内划分多个区域 每个OSPF路由器只维护所在区域的完整的链路状态信息 …

Ubuntu-迁移22.04从机械盘到固态盘

使用dd迁移22.04到新硬盘 一、概述二、详细过程1. 拷贝数据2. 更新硬盘信息3. 修改Grub 引导4. 参考链接 一、概述 Ubuntu&#xff1a;22.04 记录一下把机械硬盘中的Ubuntu移动到新的固态硬盘中&#xff0c;原机械硬盘大小是1T&#xff0c;目标固态硬盘为1T。 之前的Ubuntu安…

ARM编程指令一

预备知识 1. 寻找地址表现形式 立即数地址&#xff08;Immediate Addressing&#xff09; LDR R0, 0x2000 // 将立即数 0x2000 作为地址加载到寄存器 R0 中寄存器间接寻址&#xff08;Register Indirect Addressing&#xff09; 使用寄存器的值作为内存地址进行数据存取。 …

oracle 查询锁表

oracle 查询锁表 SELECT o.object_name, s.sid, s.serial#, p.spid, s.username, s.program FROM v l o c k e d o b j e c t l J O I N d b a o b j e c t s o O N l . o b j e c t i d o . o b j e c t i d J O I N v locked_object l JOIN dba_objects o ON l.object_id …

ufw命令简介

正文共&#xff1a;3999 字 41 图&#xff0c;预估阅读时间&#xff1a;4 分钟 我们之前在CentOS系统中研究了iptables命令的使用方法&#xff08;iptables命令简介&#xff09;&#xff0c;还做了简单的应用实验&#xff08;如何通过iptables配置URL过滤黑名单&#xff1f;、如…

速盾 CDN 提高网络安全性的方法有哪些?

CDN&#xff08;内容分发网络&#xff09;是一种广泛应用于互联网的网络架构&#xff0c;其主要目的是提高网站的访问速度和网络安全性。速盾 CDN 作为一家网络安全服务提供商&#xff0c;采取了多种方法来提高网络安全性。 首先&#xff0c;速盾 CDN 利用分布式架构来提高网络…

Vue3 + Vite 打包引入图片错误

1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入&#xff0c;注意src最好引用为符引入&#xff0c;不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …

LinkedList与链表(1万多字超级详细版本)

一. ArrayList的缺陷 上个博客已经熟悉了ArrayList的使用&#xff0c;并且进行了简单模拟实现。通过源码知道&#xff0c;ArrayList底层使用数组来存储元素&#xff1a; public class ArrayList < E > extends AbstractList < E > implements List < E &g…

深入解析DDoS攻击:原理、危害与防御策略

在日新月异的网络时代&#xff0c;DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;如同一把无形的利剑&#xff0c;悬挂在每一个互联网参与者的头顶。随着技术的飞速进步与网络环境的日益复杂&#xff0c;DDoS攻击不仅频次激增&#xff0c;其破坏力也愈发惊人。据2023年网…

JSON.parse()和JSON.stringify()用法

JSON.parse() 方法用于将 JSON 格式的字符串转换为 JavaScript 对象&#xff0c;而 JSON.stringify() 方法用于将 JavaScript 对象转换为 JSON 字符串。这两个方法可以组合使用来实现将数据从对象到字符串再到对象的转换。 示例 // 创建一个包含属性的 JavaScript 对象 var pe…

国际奥委会主席巴赫:阿里AI技术将巴黎奥运转播带到新高度

7月26日&#xff0c;巴黎奥运会开幕在即&#xff0c;国际奥委会主席巴赫在国际转播中心举行的活动中表示&#xff0c;2024巴黎奥运会展现了奥运转播的未来&#xff0c;广泛应用的阿里AI技术正在将巴黎奥运转播带到新的高度。 &#xff08;国际奥委会主席巴赫&#xff09; 在巴黎…

SQLite基础:简介、安装和命令

文章目录 1. SQLite简介1.1 SQL 和 SQLite 之间的差异1.2 SQLite 特性 2. SQLite安装3. SQLite命令4. SQLite点命令 1. SQLite简介 SQLite 是嵌入式关系数据库管理系统。它是自包含、无服务器、零配置和事务性 SQL 数据库引擎。其与大多数其他 SQL 数据库不同&#xff0c;SQLi…

自定义Linux操作日志配置

方案一&#xff1a;使用acct工具记录 步骤 1 通过设置日志文件可以对每个用户的每一条命令进行纪录&#xff0c;这一功能默认是不开放的&#xff0c;为了打开它&#xff0c;我们要确认已经安装了acct工具&#xff1a; # Debian、Ubuntu、SUSE下叫acct apt-get install acct…

视觉SLAM第一讲

第一讲-预备知识 SLAM是什么&#xff1f; SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;是同时定位与地图构建。 它是指搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己…