二维数组之前缀和下篇

        在此之前,可以先去看看二维数组之二维前缀和首篇和二维数组之前缀和中篇。

最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:
    输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出:6
    解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
    输入:nums = [1]
    输出:1
示例 3:
    输入:nums = [5,4,-1,7,8]
    输出:23

class Solution {public int maxSubArray(int[] nums) {int ans = Integer.MIN_VALUE;int max = 0;for(int i = 0;i < nums.length;i++){max = Math.max(nums[i], max + nums[i]);ans = Math.max(ans, max);}return ans;}
}

        这道题是比较经典的动态规划问题,但是也比较简单,不慌,设f(i - 1)为以下标i-1结尾连续子数组和的最大值,遍历到下标i时,求以下标i结尾的连续子数组和的最大值,就需要判断nums[i]可以单独成为一段,即以下标i起始的最大子数组和,还是需要加上前面f(i - 1)那一段,而这取决于nums[i]和nums[i]+f(i - 1)的大小关系。
        以[-2,1,-3,4,-1,2,1,-5,4]为例子,max表示f(i - 1)为以下标i-1结尾连续子数组和的最大值,ans用于保存以不同下标结尾的连续子数组和的最大值。当i等于0,值为-2,max = -2,ans = -2。当i等于1,值为1,以下标0结尾的连续子数组和的最大值为-2,显然如果1±2没有1大,所以max = 1,ans = 1。当i等于2时,值为-3,以下标1结尾的连续子数组和的最大值为1,-3 + 1 > -3,max = -2,ans = 1。这里可以发现以下标2结尾的连续子数组最大和为-2,因为连续,所以一定要加上-3,以下标2结尾的连续子数组和的最大值小于以下标1结尾的连续子数组和的最大值,所以ans的值还是为1。所以一定要注意max和ans所表示的含义。当i等于3时,值为4,以下标2结尾的连续子数组和的最大值为-2,4 + - 2 = 2 < 4,所以max = 4,ans = 4。如此重复,就能得到最后的答案。

最大子矩阵

给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。
示例:
    输入:
        [
            [-1,0],
            [0,-1]
        ]
    输出:[0,1,0,1]

class Solution {// ans中的值为初始化值,leetcode中矩阵最大长度为200,所以这里默认子矩阵的最大值为整个矩阵值的和int[] ans = new int[]{0, 200, 0, 200};int max = Integer.MIN_VALUE;public int[] getMaxMatrix(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;for(int i = 0;i < m;i++){int[] sum = new int[n];for(int j = i;j < m;j++){for(int k = 0;k < n;k++){sum[k] += matrix[j][k];}maxSubArray(sum, i, j);}}return ans;}// 和一维矩阵求解连续数组最大值的求解方法一样private void maxSubArray(int[] nums, int startCol, int endCol) {int region_max = 0;int startRow = 0;int endRow = 0;for(int i = 0;i < nums.length;i++){if(nums[i] > region_max + nums[i]){startRow = i;endRow = i;region_max = nums[i];}else{endRow = i;region_max += nums[i];}if(region_max > max){max = region_max;ans = new int[]{startCol, startRow, endCol, endRow};}}}
}

        这道题可以先将二维数组转化为一维数组,之后利用一维数组求最大子数组和的思路进行求解,将二维数组转化为一维数组,就是合并列。
请添加图片描述
        如上图所示,按行遍历所有可能的行组合,有6种,之后分别计算这6种组合的列和用sum数组表示,这样就得到了一维数组,同时也得到了对应的行起始下标i,和行结束下标j。之后按照一维数组求最大子数组和的方式定位列的起始和结束下标。

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

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

相关文章

RabbitMQ和Minio实现头像存储

使用 RabbitMQ 处理用户头像上传任务&#xff0c;同时将用户头像存储在 Minio 中是一个常见的应用场景。该示例将展示如何在 Spring Boot 项目中使用 RabbitMQ 和 Minio 实现此功能。示例包括两个部分&#xff1a;一是将头像上传任务推送到 RabbitMQ 队列中&#xff1b;二是从队…

GPT人工智能在线网页版大全

平民不参与内测&#xff0c;还能使用 ChatGPT 吗&#xff1f; 自去年 ChatGPT 爆红以来&#xff0c;关于它的消息铺天盖地。如果你真的想使用它&#xff0c;途径有很多。除了官方网站外国内还有许多 ChatGPT 的镜像网站&#xff0c;其中不乏免费的 3.5 版本。虽然有些网站需要…

2024年04月18日优雅草便民tools开源-git以及dcloud同步-长期更新

优雅草小工具-数据来自优雅草api赋能 优雅草小工具-数据来自优雅草api赋能-优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免费使用&#xff0c;本生活小工具会陆续加入…

Mysql 为什么使用 B+Tree 作为索引结构

常规的数据库存储引擎&#xff0c;一般都是采用 B 树或者 B树来实现索引的存储。 因为 B 树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数据库来说&#xff0c;所有的数据必然都是存储在…

Pixverse:开启文生视频与图生视频新纪元

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

在桐乡 CAD必须学会的基本知识

CAD必须学会的基本知识 一说到CAD&#xff0c;跑到大街上问下&#xff0c;会不会这个软件&#xff1f;保证一大批人都说会&#xff0c;但是&#xff0c;大多数人都其实只是会了点简单的东西&#xff01;抄个图没什么问题&#xff0c;但是如果遇到复杂的产品或者图纸&#xff0…

Python反爬突破Cloudflare5秒盾的处理

最近爬一个网站&#xff0c;遇到了个很棘手的问题&#xff0c;网页访问正常&#xff0c;查看网页源码内容能看到想要的信息&#xff0c;但是用python去爬的话就会遇到反爬Cloudflare 5秒盾的检测&#xff0c;返回各种比如Just a moment…等等的结果&#xff0c;最后用了两种方法…

Python基础02-掌握HTTP API的秘诀

在下面文案基础上扩展&#xff0c;写一篇技术博客&#xff0c;标题要有吸引力&#xff1f; 标题&#xff1a; 在Python中&#xff0c;使用HTTP API已成为一种常见的操作。本文将深入探讨如何使用Python的requests库与HTTP API进行交互。我们将学习如何发送GET和POST请求、处理…

java:代理模式

代理模式 动态代理是一种在运行时生成代理对象的机制,通过代理对象可以在不修改原始对象的情况下,对其进行额外的操作和增强. 被代理对象就是豌豆射手 代理角色就是火炬树桩 动态代理的使用场景 AOP(Spring框架技术): 动态代理可以在不修改原始代码的情况下,通过拦截方法…

怎么使用Python提取快递信息

目录 一、前言 二、准备工作 三、安装必要的库 四、编写代码 导入必要的库 定义快递查询函数 调用快递查询函数 五、进阶操作 定时查询快递信息 发送快递信息通知 六、注意事项 一、前言 在提取快递信息之前&#xff0c;我们需要了解快递查询的基本原理。大部分快递…

apache是什么

​Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充&#xff0c;将Perl/Python等解释器编译…

ARouter之kotlin build.gradle.kts

ARouter之kotlin build.gradle.kts kotlin的配置需要用到kapt 项目的build.gradle.kts plugins {id("com.android.application") version "8.1.2" apply falseid("org.jetbrains.kotlin.android") version "1.9.0" apply falseid(&…

使用 Qt 设计师给工具栏添加图片按钮(来自ChatGPT)

使用Qt Designer给工具栏添加图片按钮是一个直观且简单的过程。下面是详细步骤&#xff1a; 打开Qt Designer 并创建或打开一个已有的窗口界面文件&#xff08;通常以.ui结尾&#xff09;。 添加工具栏&#xff08;如果尚未添加&#xff09;&#xff1a;如果主窗口没有工具栏&…

亚马逊云挂机项目,单机600+,详细拆解

一、什么是亚马逊云挂机项目&#xff1f; 此项目有很多种叫法&#xff0c;也有人叫它亚马逊店铺挂机浏览项目。 二、赚钱原理&#xff1f; 新入驻的亚马逊商家往往是没有流量和曝光的&#xff0c;为了让店铺的商品更多的被人看到&#xff0c;花钱在平台直接买流量又不划算&a…

第2章 基本概念

第2章 基本概念 1. 学习笔记2. 书后练习问题4问题7问题8问题11编程练习2 1. 学习笔记 三字母词&#xff08;trigraphs&#xff09;&#xff0c;就是三个连续的字符合起来表示另一个字符。三字母词使C环境可以在某些缺少一些必须字符的字符集上实现。虽然trigraphs曾经在C语言的…

pyqt5 QLabel显示网络图片

分享一个QLabel显示网络图片的方。 看网上基本都是使用requests来请求的&#xff0c;这会有个问题如果将请求放入主线程页面会直接卡死&#xff0c;那么肯定pass&#xff0c;如果将请求放入QThread中&#xff0c;网络图片只有10~20个还可以凑合&#xff0c;如果需要加载上百个网…

Vue 3 项目构建与效率提升:vite-plugin-vue-setup-extend 插件应用指南

一、Vue3项目创建 前提是已安装Node.js&#xff08;点击跳转Node官网&#xff09; npm create vuelatest这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 TypeScript 和测试支持之类的可选功能提示&#xff1a; ✔ Projec…

2024-03-23青少年软件编程(Python语言)等考(一级)解析

2024-03-23青少年软件编程(Python语言)等级考试试卷(一级)解析一、单选题(共25题,共50分) 1.下列哪个命令,可以将2024转换成2024 呢?( A ) A. str(2024) B. int(2024) C. float(2024) D. bool(2024)将数字转换成字符串用到的是str() 语句。 2.猴子摘了一包桃子,第一…

WPS的bug问题(解决方法->换成office吧):表格数据和透视图数据不一致问题,多次尝试确定该bug

1.软件版本 2.问题描述 我在原始表中对其中一列进行筛选&#xff0c;选择95%以上这个选项值&#xff0c;343个数据。 在筛选了95%以上这个选项之后&#xff0c;我的另一列的值全部是no&#xff0c;343个数据。 然后进行透视图之后&#xff0c;在绘制的图形中发现&#xff0c…

腾讯面试准备-2024.3.25

腾讯面试准备-2024.3.25 腾讯面试准备-2024.3.25自我介绍C11/14/17新特性C11新特性C14新特性C17新特性 struct和class的区别进程状态现代的流媒体通信协议栈流媒体协议详解extern "C"程序从编译到执行的过程进程、线程、协程进程线程协程 如何实现一个信号与槽系统&a…