美文网首页
2020-03-18 刷题2(矩阵,动态规划)

2020-03-18 刷题2(矩阵,动态规划)

作者: nowherespyfly | 来源:发表于2020-03-19 01:09 被阅读0次

最大子矩阵

面试挂在这个题目上面了,其实仔细想想也没有那么难。

m行n列的矩阵,遍历i和j,将第i到j行的元素按列求和,压缩成一个一维向量,则可以把最大子串和算法应用在这个一维向量上,得到(l, r)为最大子串,也就是第i行到第j行的最大子矩阵,左上角:(i, l), 右下角:(j, r). 遍历每一种i和j的组合,从中取出最大值,就是整个矩阵的最大子矩阵和。

leetcode上这个题与原题稍有不同,要求返回最大子矩阵的左上角和右下角,多设置几个值记录一下就行了。



代码:

class Solution {
public:
    vector<int> getMaxMatrix(vector<vector<int>>& matrix) {
        int h = matrix.size(), w = matrix.size() ? matrix[0].size() : 0;
        int max_sum = matrix[0][0], r1 = 0, c1 = 0, r2 = 0, c2 = 0;
        for(int i = 0; i < h; i++){
            vector<int> tmp(w, 0);
            for(int j = i; j < h; j++){
                int sum = 0, begin_idx = 0;
                for(int k = 0; k < w; k++){
                    // tmp: 第i行到第j行按列求和
                    tmp[k] += matrix[j][k];
                   // 最大子串和
                    if(sum < 0) {
                        sum = tmp[k];
                        begin_idx = k;
                    }
                    else sum += tmp[k];
                    if(sum > max_sum){
                        max_sum = sum;
                        r1 = i;
                        c1 = begin_idx;
                        r2 = j;
                        c2 = k;
                    }
                }
            }
        }
        // 返回左上角,右下角
        return {r1, c1, r2, c2};
    }
};

836 矩形重叠


判断两个矩形是否重叠,则需要判断它们在x轴的投影以及y轴的投影是否重叠,这也是计算两个矩形Intersect的方法。判断在x轴上的投影是否重叠,则判断左边界的最大值是否小于右边界的最小值即可。y轴的判断也是类似。

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        return(max(rec1[0], rec2[0]) < min(rec1[2], rec2[2]) &&
       max(rec1[1], rec2[1]) <  min(rec1[3], rec2[3]));
    }
};

相关文章

  • 2020-03-18 刷题2(矩阵,动态规划)

    最大子矩阵 面试挂在这个题目上面了,其实仔细想想也没有那么难。 m行n列的矩阵,遍历i和j,将第i到j行的元素按列...

  • F - 6 HDU - 2830

    动态规划(dp):最大子矩阵

  • E - 5 HDU - 2870

    动态规划(dp):最大子矩阵

  • 求最大子矩阵的大小

    这个题考察的是动态规划,并且要了解LeetCode第84题,要清楚直方图的面积怎么计算。 85.最大矩阵(Leet...

  • 动态规划之路径和作小

    解题思路: 此题是典型的动态规划题目。 状态定义: 设 dpdp 为大小 m \times nm×n 矩阵,其中 ...

  • 如何解决动态规划问题

    曾经的我以为动态规划很神秘,很难理解。后来随着刷的动态规划相关的题越来越多,对于动态规划也就驾轻就熟了。我一开始来...

  • leetcode刷题之动态规划

    1,括号生成—— 0022 回溯法数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有...

  • 矩阵连乘(DP+递归+备忘录)

    动态规划+递归+备忘录 解决矩阵连乘 问题描述: 给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘...

  • java刷题心得(2)之动态规划(java)

    当时在遇到这道题的时候,心里想的是。 这多简单啊,不就是一个递归吗? 然后…… 超时。。。 这是因为之前我们之前用...

  • 2018-08-09

    动态规划之矩阵连乘问题 问题描述 给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2....

网友评论

      本文标题:2020-03-18 刷题2(矩阵,动态规划)

      本文链接:https://www.haomeiwen.com/subject/eheqyhtx.html