国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變

這篇具有很好參考價(jià)值的文章主要介紹了【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一【題目類(lèi)別】

  • 矩陣

二【題目難度】

  • 中等

三【題目編號(hào)】

  • 304.二維區(qū)域和檢索-矩陣不可變

四【題目描述】

  • 給定一個(gè)二維矩陣 matrix,以下類(lèi)型的多個(gè)請(qǐng)求:
    • 計(jì)算其子矩形范圍內(nèi)元素的總和,該子矩陣的 左上角 為 (row1, col1) ,右下角 為 (row2, col2) 。
  • 實(shí)現(xiàn) NumMatrix 類(lèi):
    • NumMatrix(int[][] matrix) 給定整數(shù)矩陣 matrix 進(jìn)行初始化
    • int sumRegion(int row1, int col1, int row2, int col2) 返回左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩陣的元素總和。

五【題目示例】

  • 示例 1:
    • 【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變,LeetCode,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),LeetCode,二維區(qū)域和檢索-矩陣不可變
    • 輸入:
      • [“NumMatrix”,“sumRegion”,“sumRegion”,“sumRegion”]
      • [[[[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]],[2,1,4,3],[1,1,2,2],[1,2,2,4]]
    • 輸出:
      • [null, 8, 11, 12]
    • 解釋:
      • NumMatrix numMatrix = new NumMatrix([[3,0,1,4,2],[5,6,3,2,1],[1,2,0,1,5],[4,1,0,1,7],[1,0,3,0,5]]);
      • numMatrix.sumRegion(2, 1, 4, 3); // return 8 (紅色矩形框的元素總和)
      • numMatrix.sumRegion(1, 1, 2, 2); // return 11 (綠色矩形框的元素總和)
      • numMatrix.sumRegion(1, 2, 2, 4); // return 12 (藍(lán)色矩形框的元素總和)

六【題目提示】

  • m = = m a t r i x . l e n g t h m == matrix.length m==matrix.length
  • n = = m a t r i x [ i ] . l e n g t h n == matrix[i].length n==matrix[i].length
  • 1 < = m , n < = 200 1 <= m, n <= 200 1<=m,n<=200
  • ? 1 0 5 < = m a t r i x [ i ] [ j ] < = 1 0 5 -10^5 <= matrix[i][j] <= 10^5 ?105<=matrix[i][j]<=105
  • 0 < = r o w 1 < = r o w 2 < m 0 <= row1 <= row2 < m 0<=row1<=row2<m
  • 0 < = c o l 1 < = c o l 2 < n 0 <= col1 <= col2 < n 0<=col1<=col2<n
  • 最多調(diào)用 1 0 4 次 s u m R e g i o n 方法 最多調(diào)用 10^4 次 sumRegion 方法 最多調(diào)用104sumRegion方法

七【解題思路】

  • 利用前綴和的思想
  • 新建一個(gè)二維數(shù)組,這個(gè)二維數(shù)組比原來(lái)的二維數(shù)組多一列,因?yàn)槎S數(shù)組的每個(gè)位置都存儲(chǔ)了之前元素的和,故多添加的一列就存儲(chǔ)了原來(lái)二維數(shù)組最后一列的元素及之前值的和,我們只需要按照這個(gè)規(guī)律遍歷填充這個(gè)新的二維數(shù)組即可
  • 對(duì)于傳入的二維區(qū)域,我們只需要逐行的利用前綴和進(jìn)行計(jì)算求和
  • 最后返回結(jié)果即可

八【時(shí)間頻度】

  • 時(shí)間復(fù)雜度: O ( m n ) O(mn) O(mn), m 、 n m、n mn分別為傳入的二維數(shù)組的行數(shù)和列數(shù)
  • 空間復(fù)雜度: O ( m n ) O(mn) O(mn), m 、 n m、n mn分別為傳入的二維數(shù)組的行數(shù)和列數(shù)

九【代碼實(shí)現(xiàn)】

  1. Java語(yǔ)言版
class NumMatrix {

    int[][] sums;

    public NumMatrix(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        sums = new int[m][n+1];
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                sums[i][j + 1] = sums[i][j] + matrix[i][j];
            }
        }
    }
    
    public int sumRegion(int row1, int col1, int row2, int col2) {
        int res = 0;
        for(int i = row1;i <= row2;i++){
            res += sums[i][col2 + 1] - sums[i][col1];
        }
        return res;
    }

}
  1. C語(yǔ)言版
typedef struct 
{
    int** sums;
    int sumsSize;
} NumMatrix;


NumMatrix* numMatrixCreate(int** matrix, int matrixSize, int* matrixColSize) 
{
    int m = matrixSize;
    int n = matrixColSize[0];
    NumMatrix* obj = (NumMatrix*)malloc(sizeof(NumMatrix));
    obj->sums = (int**)malloc(sizeof(int*) * m);
    obj->sumsSize = m;
    for(int i = 0;i < m;i++)
    {
        obj->sums[i] = (int*)malloc(sizeof(int) * (n + 1));
    }
    for(int i = 0;i < m;i++)
    {
        for(int j = 0;j < n;j++)
        {
            obj->sums[i][j + 1] = obj->sums[i][j] + matrix[i][j];
        }
    }
    return obj;
}

int numMatrixSumRegion(NumMatrix* obj, int row1, int col1, int row2, int col2) 
{
    int res = 0;
    for(int i = row1;i <= row2;i++)
    {
        res += obj->sums[i][col2 + 1] - obj->sums[i][col1];
    }
    return res;
}

void numMatrixFree(NumMatrix* obj) 
{
    for(int i = 0;i < obj->sumsSize;i++)
    {
        free(obj->sums[i]);
    }
    free(obj);
}
  1. Python語(yǔ)言版
class NumMatrix:

    def __init__(self, matrix: List[List[int]]):
        m = len(matrix)
        n = len(matrix[0])
        self.sums = [[0] * (n + 1) for _ in range(m)]
        for i in range(0, m):
            for j in range(0, n):
                self.sums[i][j + 1] = self.sums[i][j] + matrix[i][j]

    def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
        res = 0
        for i in range(row1, row2 + 1):
            res += self.sums[i][col2 + 1] - self.sums[i][col1]
        return res
  1. C++語(yǔ)言版
class NumMatrix {
public:
    vector<vector<int>> sums;

    NumMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        sums.resize(m, vector<int>(n + 1));
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                sums[i][j + 1] = sums[i][j] + matrix[i][j];
            }
        }
    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
        int res = 0;
        for(int i = row1;i <= row2;i++){
            res += sums[i][col2 + 1] - sums[i][col1];
        }
        return res;
    }
};

十【提交結(jié)果】

  1. Java語(yǔ)言版
    【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變,LeetCode,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),LeetCode,二維區(qū)域和檢索-矩陣不可變

  2. C語(yǔ)言版
    【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變,LeetCode,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),LeetCode,二維區(qū)域和檢索-矩陣不可變

  3. Python語(yǔ)言版
    【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變,LeetCode,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),LeetCode,二維區(qū)域和檢索-矩陣不可變

  4. C++語(yǔ)言版
    【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變,LeetCode,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),LeetCode,二維區(qū)域和檢索-矩陣不可變文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-642322.html

到了這里,關(guān)于【LeetCode每日一題】——304.二維區(qū)域和檢索-矩陣不可變的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • leetcode303. 區(qū)域和檢索 - 數(shù)組不可變(java)

    leetcode303. 區(qū)域和檢索 - 數(shù)組不可變(java)

    難度 - 簡(jiǎn)單 原題鏈接 - 區(qū)域和檢索 - 數(shù)組不可變 給定一個(gè)整數(shù)數(shù)組 nums,處理以下類(lèi)型的多個(gè)查詢: 計(jì)算索引 left 和 right (包含 left 和 right)之間的 nums 元素的 和 ,其中 left = right 實(shí)現(xiàn) NumArray 類(lèi): NumArray(int[] nums) 使用數(shù)組 nums 初始化對(duì)象 int sumRange(int i, int j) 返回?cái)?shù)組 num

    2024年02月12日
    瀏覽(23)
  • 【LeetCode每日一題】——566.重塑矩陣

    【LeetCode每日一題】——566.重塑矩陣

    矩陣 簡(jiǎn)單 566.重塑矩陣 在 MATLAB 中,有一個(gè)非常有用的函數(shù) reshape ,它可以將一個(gè) m x n 矩陣重塑為另一個(gè)大小不同(r x c)的新矩陣,但保留其原始數(shù)據(jù)。 給你一個(gè)由二維數(shù)組 mat 表示的 m x n 矩陣,以及兩個(gè)正整數(shù) r 和 c ,分別表示想要的重構(gòu)的矩陣的行數(shù)和列數(shù)。 重構(gòu)后

    2024年02月14日
    瀏覽(20)
  • ( 數(shù)組和矩陣) 566. 重塑矩陣 ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 566. 重塑矩陣 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 在 MATLAB 中,有一個(gè)非常有用的函數(shù) reshape ,它可以將一個(gè) m x n 矩陣重塑為另一個(gè)大小不同( r x c )的新矩陣,但保留其原始數(shù)據(jù)。 給你一個(gè)由二維數(shù)組 mat 表示的 m x n 矩陣,以及兩個(gè)正整數(shù) r 和 c ,分別表示想要的重構(gòu)的矩陣的行數(shù)和列數(shù)。 重構(gòu)后的矩陣需要

    2024年02月07日
    瀏覽(24)
  • ( 數(shù)組和矩陣) 766. 托普利茨矩陣 ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 766. 托普利茨矩陣 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給你一個(gè) m x n 的矩陣 matrix 。如果這個(gè)矩陣是托普利茨矩陣,返回 true ;否則,返回 false 。 如果矩陣上每一條由左上到右下的對(duì)角線上的元素都相同,那么這個(gè)矩陣是 托普利茨矩陣 。 示例 1: 輸入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] 輸出:true 解釋: 在上述矩陣

    2024年02月02日
    瀏覽(19)
  • LeetCode·每日一題·2679. 矩陣中的和·排序

    LeetCode·每日一題·2679. 矩陣中的和·排序

    作者:小迅 鏈接:https://leetcode.cn/problems/sum-in-a-matrix/solutions/2330084/pai-xu-zhu-shi-chao-ji-xiang-xi-by-xun-g-a3gw/ 來(lái)源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 ? ? 題意 - 給定一個(gè)二維數(shù)組,每次取每一行的最大值構(gòu)成一列,在該列

    2024年02月12日
    瀏覽(20)
  • 【LeetCode每日一題】——766.托普利茨矩陣

    【LeetCode每日一題】——766.托普利茨矩陣

    矩陣 簡(jiǎn)單 766.托普利茨矩陣 給你一個(gè) m x n 的矩陣 matrix 。如果這個(gè)矩陣是托普利茨矩陣,返回 true ;否則,返回 false 。 如果矩陣上每一條由左上到右下的對(duì)角線上的元素都相同,那么這個(gè)矩陣是 托普利茨矩陣 。 示例 1: 輸入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] 輸出:true 解釋

    2024年02月14日
    瀏覽(20)
  • ( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 集合 s 包含從 1 到 n 的整數(shù)。不幸的是,因?yàn)閿?shù)據(jù)錯(cuò)誤,導(dǎo)致集合里面某一個(gè)數(shù)字復(fù)制了成了集合里面的另外一個(gè)數(shù)字的值,導(dǎo)致集合 丟失了一個(gè)數(shù)字 并且 有一個(gè)數(shù)字重復(fù) 。 給定一個(gè)數(shù)組 nums 代表了集合 S 發(fā)生錯(cuò)誤后的結(jié)果。 請(qǐng)你找出重復(fù)出現(xiàn)的整數(shù),再找到

    2024年02月04日
    瀏覽(23)
  • ( 數(shù)組和矩陣) 697. 數(shù)組的度 ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 697. 數(shù)組的度 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)非空且只包含非負(fù)數(shù)的整數(shù)數(shù)組 nums ,數(shù)組的 度 的定義是指數(shù)組里任一元素出現(xiàn)頻數(shù)的最大值。 你的任務(wù)是在 nums 中找到與 nums 擁有相同大小的度的最短連續(xù)子數(shù)組,返回其長(zhǎng)度。 示例 1: 輸入:nums = [1,2,2,3,1] 輸出:2 解釋: 輸入數(shù)組的度是 2 ,因?yàn)?/p>

    2024年02月02日
    瀏覽(22)
  • Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 示例 1: 輸入: matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出: [1,2,3,6,9,8,7,4,5] 示例 2: 輸入: matrix =?[[1,2,3,4],[5,6,7,8],[9,10,11,12]] 輸出: [1,2,3,4,8,12,11,10,9,5,6,7] 限制: 0 = matrix.length = 100 0 = matrix[i].length?= 100 1.題目要求

    2024年02月13日
    瀏覽(28)
  • 【LeetCode每日一題】——1572.矩陣對(duì)角線元素的和

    【LeetCode每日一題】——1572.矩陣對(duì)角線元素的和

    矩陣 簡(jiǎn)單 1572.矩陣對(duì)角線元素的和 給你一個(gè)正方形矩陣 mat,請(qǐng)你返回矩陣對(duì)角線元素的和。 請(qǐng)你返回在矩陣主對(duì)角線上的元素和副對(duì)角線上且不在主對(duì)角線上元素的和。 示例 1: 輸入:mat = [[1,2,3], ?????????????????????[4,5,6], ?????????????????????[7,

    2024年02月14日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包