Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-06-15:返回一个二维数组中,子矩阵最大累加和。

2021-06-15:返回一个二维数组中,子矩阵最大累加和。

原创
作者头像
福大大架构师每日一题
修改于 2021-06-16 02:28:25
修改于 2021-06-16 02:28:25
5580
举报

2021-06-15:返回一个二维数组中,子矩阵最大累加和。

福大大 答案2021-06-15:

根据昨天的每日一题计算出0 ~ 0行,0 ~ 1行,0 ~ 2行,……0~N行的子数组最大累加和。

根据昨天的每日一题计算出1 ~ 1行,1 ~ 2行,1 ~ 3行,……1~N行的子数组最大累加和。

根据昨天的每日一题计算出2 ~ 2行,2 ~ 3行,2 ~ 4行,……2~N行的子数组最大累加和。

……

最后取最大值做返回值。

时间复杂度:O(N^2 * M)。

代码用golang编写。代码如下:

代码语言:txt
AI代码解释
复制
package main

import (
    "fmt"
    "math"
)

func main() {
    m := [][]int{{1, 2}, {3, -40}}
    ret := maxSum(m)
    fmt.Println(ret)
}

func maxSum(m [][]int) int {
    if len(m) == 0 || len(m[0]) == 0 {
        return 0
    }
    // O(N^2 * M)
    N := len(m)
    M := len(m[0])
    max := math.MinInt64
    for i := 0; i < N; i++ {
        // i~j
        s := make([]int, M)
        for j := i; j < N; j++ {
            for k := 0; k < M; k++ {
                s[k] += m[j][k]
            }
            max = getMax(max, maxSubArray(s))
        }
    }
    return max
}

func maxSubArray(arr []int) int {
    if len(arr) == 0 {
        return 0
    }
    N := len(arr)
    ans := arr[0]
    pre := arr[0]
    for i := 1; i < N; i++ {
        pre = getMax(arr[i], pre+arr[i])
        ans = getMax(ans, pre)
    }
    return ans
}

func getMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

执行结果如下:

图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021-06-14:返回一个数组中,子数组最大累加和。
动态规划。这道题过于经典,就不说具体过程了。时间复杂度:O(N)。空间复杂度:O(1)。
福大大架构师每日一题
2021/06/14
4110
2021-06-14:返回一个数组中,子数组最大累加和。
2021-07-10:请返回arr中,求子数组的累加和,是<=K
2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。
福大大架构师每日一题
2021/07/10
3990
2021-07-10:请返回arr中,求子数组的累加和,是<=K
2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
福大大架构师每日一题
2022/01/20
2410
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。
福大大架构师每日一题
2021/06/16
6120
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。
2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v
2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。
福大大架构师每日一题
2021/03/31
2870
2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
2021-10-26:给定一个数组arr,arri = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷子种数。
福大大架构师每日一题
2021/10/26
3070
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。
福大大架构师每日一题
2021/07/15
4340
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的。返回其长度。
福大大架构师每日一题
2021/03/30
4800
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助。 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍。 小团想知道他的魔法最多可以帮助小美将数组的和变大到多少?
2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助。 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍。 小团想知道他
福大大架构师每日一题
2022/04/14
1.6K0
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
福大大架构师每日一题
2021/08/05
9110
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。
福大大架构师每日一题
2021/04/04
8600
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-08-22:定义什么是可整合数组:一个数组排完序之后
2021-08-22:定义什么是可整合数组:一个数组排完序之后,除了最左侧的数外,有arri = arri-1+1,则称这个数组为可整合数组,比如{5,1,2,4,3}、{6,2,3,1,5,4}都是可整合数组。返回arr中最长可整合子数组的长度。
福大大架构师每日一题
2021/08/22
2210
2021-08-22:定义什么是可整合数组:一个数组排完序之后
2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益
比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值,
福大大架构师每日一题
2022/03/18
7760
2021-05-06:给定一个二维数组matrix, 你可以从任何位置
2021-05-06:给定一个二维数组matrix, 你可以从任何位置出发,走向上下左右四个方向 。返回能走出来的最长的递增链长度。
福大大架构师每日一题
2021/05/06
5600
2021-05-06:给定一个二维数组matrix, 你可以从任何位置
2021-03-19:给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的最
2021-03-19:给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的最大子矩形,内部有多少个1。
福大大架构师每日一题
2021/03/19
5620
2021-03-19:给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的最
​2021-05-13:数组中所有数都异或起来的结果,叫做异或和。
2021-05-13:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,返回arr的最大子数组异或和。
福大大架构师每日一题
2021/05/13
4250
​2021-05-13:数组中所有数都异或起来的结果,叫做异或和。
2021-08-13:给定一个每一行有序、每一列也有序,整体可
2021-08-13:给定一个每一行有序、每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数。
福大大架构师每日一题
2021/08/13
3530
2021-08-13:给定一个每一行有序、每一列也有序,整体可
2021-06-26:给定一个只有0和1组成的二维数组,返回边框全是1的最大正方形面积。
2021-06-26:给定一个只有0和1组成的二维数组,返回边框全是1的最大正方形面积。
福大大架构师每日一题
2021/06/26
4070
2021-06-26:给定一个只有0和1组成的二维数组,返回边框全是1的最大正方形面积。
Leetcode模块训练3
1. 统计(优美子数组)(1048) 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字, 我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数目。 示例 1: 输入:nums = [1,1,2,1,1], k = 3 输出:2 解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。 示例 2: 输入:nums = [2,4,6], k = 1 输出:0 解释:数列中不包含任何奇数,所以不存在优美子数组。 示例
素履coder
2023/03/23
4510
2021-04-25:给定一个数组arr,和一个正数M,返回在arr的子数组在长度不超过M的情况下,求最大的累加和。
[左神java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class46/Code04_MaxSumLengthNoMore.java)
福大大架构师每日一题
2021/08/05
9060
推荐阅读
2021-06-14:返回一个数组中,子数组最大累加和。
4110
2021-07-10:请返回arr中,求子数组的累加和,是<=K
3990
2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m
2410
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。
6120
2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v
2870
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
3070
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值
4340
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
4800
2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助。 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍。 小团想知道他的魔法最多可以帮助小美将数组的和变大到多少?
1.6K0
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
9110
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
8600
2021-08-22:定义什么是可整合数组:一个数组排完序之后
2210
2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益
7760
2021-05-06:给定一个二维数组matrix, 你可以从任何位置
5600
2021-03-19:给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的最
5620
​2021-05-13:数组中所有数都异或起来的结果,叫做异或和。
4250
2021-08-13:给定一个每一行有序、每一列也有序,整体可
3530
2021-06-26:给定一个只有0和1组成的二维数组,返回边框全是1的最大正方形面积。
4070
Leetcode模块训练3
4510
2021-04-25:给定一个数组arr,和一个正数M,返回在arr的子数组在长度不超过M的情况下,求最大的累加和。
9060
相关推荐
2021-06-14:返回一个数组中,子数组最大累加和。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档