Leetcode363. 矩形区域不超过 K 的最大数值和

Leetcode363. 矩形区域不超过 K 的最大数值和

  • 题目
  • 思路
  • 结果与不足之处
  • 新知识
  • 自己的代码
  • 官方代码

题目

链接: 363.

题目描述:给你一个m x n的矩阵matrix和一个整数k,找出并返回矩阵内部矩形区域的不超过k的最大数值和。
题目数据保证总会存在一个数值和不超过k的矩形区域。

提示:
  m = matrix.length
  n = matrix[i].length
  1 <= m, n <= 100
  -100 <= matrix[i][j] <= 100
  -10 ^ 5 <= k <= 10 ^ 5

思路

  其实就是暴力。
  直接暴力的话是O((mn) ^ 3),通过先建立前序和可以将复杂度降低到O((mn) ^ 2)

结果与不足之处

结果:执行用时:768ms,在所有 C++ 提交中击败了11.39%的用户;
内存消耗:8.1MB,在所有 C++ 提交中击败了91.23%的用户。
在计算和遍历的时候需要使用过多的判断,写代码比较慢,其实可以使用matrix的1-n进行储存,就不用判断了。

新知识

  1. 二维矩阵的大小求取:int m = matrix.size(); int n = matrix[0].size();

  2. 使用int二维数组的效率远高于vector>(会超过时间限制)。

自己的代码

class Solution {
   
public:
    int maxSumSubmatrix(vector<vector<int>>& matrix, int k) {
   
        int m = matrix.size();
        int n = matrix[0].size();
        //vector> qianxu(m, vector(n, 0));
        int qianxu[m][n];
        
        int i, j, t;

        for(i = 0; i < m; i++){
   
            t = 0;
            for(j = 0; j < n; j++){
   
                if(i == 0){
   
                    if(j == 0){
   
                        t = matrix[i][j];
                        qianxu[i][j

你可能感兴趣的:(Leetcode,leetcode)