leetcode 152.乘积最大子数组

news2024/11/23 15:17:44

题目描述

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
子数组 是数组的连续子序列。在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-product-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题

定义一个二维数组dp[n][n], 每一个元素dp[i][j]记录从i位置到j位置的乘积,利用变量max实现每次更新dp之后记录当前乘积最大值

class Solution {
    public int maxProduct(int[] nums) {
        int max = nums[0], n = nums.length;
        int[][] dp = new int[n][n];
        dp[0][0] = nums[0];

        for(int i = 0; i< n;i++){
            for(int j = i; j< n;j++){
                if(i == j){
                    dp[i][j] = nums[i];
                }else{
                    dp[i][j] = dp[i][j-1] * nums[j];
                }
                max = Math.max(max, dp[i][j]);
            }
        }

        return max;
    }
}

好, 去提交
在这里插入图片描述

错了!!!!提示超出内存限制
接下来优化代码,发现该代码优化后的时间复杂度也会是O(n^2)

需要换个思路:
同时记录最大值和最小值,这样的话如果当前元素是正数那么就乘最大值,如果当前元素是负数就乘最小值

class Solution {
    public int maxProduct(int[] nums) {
        int n = nums.length;
        int[] maxF = new int[n];
        int[] minF = new int[n];
        System.arraycopy(nums, 0, maxF, 0, n);
        System.arraycopy(nums, 0, minF, 0, n);
        for (int i = 1; i < n; ++i) {
            maxF[i] = Math.max(maxF[i - 1] * nums[i], Math.max(nums[i], minF[i - 1] * nums[i]));
            minF[i] = Math.min(minF[i - 1] * nums[i], Math.min(nums[i], maxF[i - 1] * nums[i]));
        }

        int ans = maxF[0];
        for (int i = 1; i < n; ++i) {
            ans = Math.max(ans, maxF[i]);
        }
        return ans;
    }
}

在这里插入图片描述

附:System.arraycopy()有什么作用
System.arraycopy()是Java中的一个方法,它可以用来将一个数组中的一部分元素复制到另一个数组中。 它的目的是在效率方面提高数组操作。

该方法有多个重载,基本语法为:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

其中各参数含义如下:

  • src: 源数组
  • srcPos: 源数组中被复制的起始位置
  • dest: 目标数组
  • destPos: 复制到目标数组中的起始位置
  • length: 要复制的元素个数

使用 System.arraycopy()方法可以避免手动循环,并且代码可读性更好,同时也能提升程序效率。

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

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

相关文章

从2PC和容错共识算法讨论zookeeper中的Create请求

大家好&#xff0c;我是方圆。最近在读《数据密集型应用系统设计》&#xff0c;其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中&#xff0c;误将容错共识算法写成了2PC&#xff08;两阶段提交协议&#xff09;&#xff0c;所以准备以此文对…

Speech | 提取语音(数据集)的语音特征合集

本文主要讲解了提取数据集的一些主要工具&#xff0c;以及如何使用这些工具&#xff0c;包含安装以及运行命令。 提取语音&#xff08;数据集&#xff09;的语音特征工具&#xff08;Extract audio features toolkits&#xff09; • openSMILE • COVAREP • ESPNet • YAAF…

Java集合框架:链表和LinkedList详解

目录 一、ArrayList的缺陷 二、链表&#xff08;主要介绍不带头的非循环的 单链表 / 双链表&#xff09; 注&#xff1a; 三、模拟链表的实现&#xff1a; MySingleList&#xff08;单链表&#xff09; MyLinkedList&#xff08;双链表&#xff09; 四、LinkedList的使用 …

HNU计算机体系结构-实验一:RISC-V指令理解

HNU计算机体系结构-实验一 前言1.实验目的2.实验步骤1.安装模拟器Ripes2.生成汇编指令3.思考问题1&#xff09;指令add x15, x14, x152&#xff09;指令bge x15 x14 -683&#xff09;指令lw x15, -20 x84&#xff09;指令sw x15, -20 x85&#xff09;简述BranchE信号的作用6&am…

通达信筹码集中度计算公式,解决了结果不同的问题

筹码分布图基本上是国内股票交易软件的标配&#xff0c;一般在K线图窗口的右侧。通达信软件中&#xff0c;在右下角有个“筹”&#xff0c;点击之后就可以看到“筹码分布图”。&#xff08;如下图&#xff09;筹码分布图是根据一定的模型计算出的流通股票持仓成本分布情况&…

postman接口关联实战解析

在使用postman做接口测试时&#xff0c;有时候后面的接口需要获取前面接口的某一个返回值做为请求参数&#xff0c;这时就可以使用关联。 如从A接口提取出a字段的值&#xff0c;供B接口的b字段使用。 一个接口的返回报文如下&#xff1a; {"retCode": "0&quo…

【数据库原理与实践】知识点归纳(上)

第1章 数据库系统概述 &#xff08;数据处理技术的发展 数据库的基本概念和特点&#xff09; 一&#xff1a;数据、信息、知识、决策 对应&#xff1a;Data、Information、Knowledge、Decision 二&#xff1a;数据库技术的产生与发展 产生原因&#xff1a;数据管理任务的…

如何正确使用Postman变量?又该如何灵活设置变量?

目录 引言 理解变量 postman的变量类型 变量作用域 变量覆盖规则 创建变量 创建全局变量 创建环境变量 创建集合变量 使用变量 引言 Postman变量可以帮助你快速生成测试数据、模拟不同的场景和环境。 但是&#xff0c;如何正确使用Postman变量&#xff1f;又该如何…

Android的服务Service

Android学了太久了&#xff0c;都忘了。复习下四大组件之一的Service。 介绍 Android的Service是一种在后台执行长时间运行操作的组件&#xff0c;它可以在没有用户界面的情况下执行任务&#xff0c;并且可以与应用程序的其他组件进行通信。Service通常用于处理网络请求、音乐…

快速创建Django项目

环境搭建 安装Django之前需要先安装python环境和pycharm。 目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x。 python安装教程&#xff1a;https://blog.csdn.net/David_house/article/details/100110542 项目创建 打开pycharm&#xff0c;选择文件–>新建项目 创建D…

MySQL操作基础

文章目录 一、Mysql的基本概念1.1数据库有哪些组成数据表数据库 1.2数据库系统和数据库管理系统1.3数据库的发展史 二、数据库的分类三、数据库的数据类型三、数据库的操作3.1查看数据库的结构3.2创建及删除数据库和表3.3管理表中的数据记录3.4修改表名和表结构 Linux操作系统&…

11.JavaWeb-Spring框架

1.Spring概念 Spring框架是一个轻量级开源的应用程序框架&#xff0c;用于开发Java企业级应用程序。它提供了一种综合的编程和配置模型&#xff0c;可以帮助开发人员构建灵活、可扩展且易于维护的应用程序。 Spring的根本使命&#xff1a;简化Java开发 【Spring给予了Java新生】…

文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题

四、一次聚会需要邀请多少人&#xff0c;才能让其中 3 人的生日很可能相同? 文心一言&#xff1a; 为了解决这个问题&#xff0c;我们需要先计算出所有可能的生日组合数&#xff0c;然后计算出其中生日相同的组合数。 已知需要邀请的人数为&#xff1a;23人 根据组合数公式…

大数据开发之Hive案例篇12:HDFS rebalance 一例

文章目录 一. 问题描述二. 解决方案2.1 增加节点2.2 rebalance2.3 rebalance引发的问题 一. 问题描述 公司的离线数仓是CDH集群&#xff0c;19个节点&#xff0c;HDFS存储空间大约400TB左右&#xff0c;使用量在200TB左右。 由于历史遗留的问题&#xff0c;数据仓库需要重构&a…

将Qtcreator编译器、调试器等配置为MSVC2017/2019

目录 1. 前言 2. 工具/原料 2.1. 安装Windows下的软件开发调试器 3. 配置Qtcreator 1. 前言 安装Qt或Qtcreator时&#xff0c;一般选择MinGW 64-bit或MSVC编译器。对于MinGW 64-bit很简单&#xff0c;一般安装后会自动在Qtcreator配置好&#xff0c;不用费心就可以进行开发…

一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于NIM_DUILIB_FRAMEWORK框架的网易云信demo:NIM_PC_DEMO

NIM_PC_DEMO 网易云信 PC IM Demo 是基于网易云信 PC SDK 制作的即时通讯示例程序&#xff0c;UI 库使用 NIM Duilib 制作。 github地址:。 1、预览 2、最低要求 CMake 3.10 或以上版本。Visual Studio 2017 或以上版本。Git。 3、开发步骤 NIM Demo 从 8.4.0 版本开始使…

selenium面试题总结

今天有同学问到seleinum面试的时候会问到的问题&#xff0c;随便想了想&#xff0c;暂时纪录一下。欢迎大家在评论中提供更多问题。 1.selenium中如何判断元素是否存在&#xff1f; selenium中没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获…

Java网络开发(Tomcat同步数据增删改查)—— 用Jsp语法实现同步请求的 增删改查

目录 引出显示所有数据到前端&#xff08;1&#xff09;前端代码&#xff1a;list.jsp&#xff08;2&#xff09;后端代码&#xff1a;CompanyListServlet.java 新增数据---转发类型信息---新增信息业务&#xff08;1&#xff09;在list.jsp页面点击添加&#xff08;2&#xff…

don‘t have write permissions for the /System/Library/Frameworks/Ruby.framework

don’t have write permissions for the /System/Library/Frameworks/Ruby.framework sudo gem install sigh或sudo gem install -n /usr/local/bin cocoapods --pre出现&#xff1a; appleCQIMAC-L1A9Q05R ~ % sudo gem update --system Password: Updating rubygems-update F…