二维数组之前缀和下篇

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

最大子数组和

给你一个整数数组 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,一经查实,立即删除!

相关文章

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;本生活小工具会陆续加入…

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

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

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

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

怎么使用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(&…

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

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

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

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

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…

2024_GAMES101作业环境配置Mac(intel)_VSCode_Clion

目录 VSCodeClionCMakeList.txt VSCode brew install cmake 更换下载源为阿里云下载 opencv&#xff0c;不然会很慢 cd "$(brew --repo)" git remote -v cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git…

Ubuntu 24.04 LTS (Noble Numbat) 下载

Ubuntu 24.04 LTS (Noble Numbat) 下载 Ubuntu 24.04 LTS 开启 Beta 测试, 正式版即将发布 请访问原文链接&#xff1a;Ubuntu 24.04 LTS (Noble Numbat)&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Ubuntu 24.04 LTS 首个…

如果出现这7个现象,别犹豫,是时候更换你的海外仓系统了

不知不觉&#xff0c;即使是曾经让你觉得很有用的海外仓系统也出现了问题。 曾经看似可以简化海外仓运营的管理系统&#xff0c;现在却难以满足你的需求。你是否注意到你的仓库管理效率低下的情况已经开始蔓延&#xff0c;甚至影响了公司的盈利&#xff1f; 仓库日常的管理工…

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 &#xff08;带你逐步思考&#xff09; 链接&#xff1a;https://leetcode.cn/problems/trapping-rain-water/ 难度&#xff1a;hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多…

鸿蒙开发踩坑与理解

基于 studio dev3.1,api 9 总结:现在的鸿蒙,感觉就像是用eclipse开发android的时候的android4.0或者4.0以下 持续更新中… 申请next,可能没通过? 没下文了。可能华为还不希望普通开发者进行开发吧。 兼容性问题 鸿蒙4.0,华为mate40E当前版本有黑屏、卡顿问题,客服说a…

【正点原子Linux连载】 第三十三章 Linux CAN驱动实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三十…

Word目录格式的编辑记录

1、整体风格 鼠标右键&#xff0c;编辑域 选择目录&#xff0c;风格可以根据自己的喜好选择古典、优雅、正式等 2、字段、段落样式调整 更新整个目录 加载出样式侧框&#xff0c;选中某一级目录&#xff0c;侧框会定位到其样式 然后修改对应的样式&#xff0c;比如字体和段…

vscode自动生成返回值的快捷键

vscode中类似idea的altenter功能&#xff0c;可以添加返回值 idea中是Introduce local variable&#xff0c; vscode中按下command.(句号) 然后选extract to local variable或者 Assign statement to new local variable都行&#xff0c; 光标在分号前如图&#xff1a; 光标在…

探索直播+电商系统中台架构:连接消费者与商品的智能纽带

随着直播电商的崛起&#xff0c;电商行业进入了全新的智能时代。直播形式的互动性和即时性为消费者提供了全新的购物体验&#xff0c;而电商平台则为商品的展示、销售和配送提供了强大的支持。在这一背景下&#xff0c;直播电商系统中台架构成为了连接消费者与商品的智能纽带&a…