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

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將

這篇具有很好參考價值的文章主要介紹了2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid,

每個格子要么為 0 (空)要么為 1 (被占據(jù)),

給你郵票的尺寸為 stampHeight x stampWidth。

我們想將郵票貼進(jìn)二進(jìn)制矩陣中,且滿足以下 限制 和 要求 :

覆蓋所有空格子,不覆蓋任何被占據(jù)的格子,

可以放入任意數(shù)目的郵票,郵票可以相互有重疊部分,

郵票不允許旋轉(zhuǎn),郵票必須完全在矩陣內(nèi),

如果在滿足上述要求的前提下,可以放入郵票,請返回 true ,否則返回 false。

輸入:grid = [[1,0,0,0],[1,0,0,0],[1,0,0,0],[1,0,0,0],[1,0,0,0]], stampHeight = 4, stampWidth = 3。

輸出:true。

答案2023-05-11:

大體過程如下:

1.首先對矩陣 grid 進(jìn)行二維前綴和計算,得到一個新的矩陣 sum。該矩陣中每個位置表示從左上角出發(fā),到該位置形成的子矩陣中所有元素的和。

2.對 grid 中的每個為 0 的位置 (i, j),檢查以該位置為左上角的子矩陣是否能夠被指定的印章完全覆蓋。如果可以,將 diff[i][j] 加 1,diff[i][j+stampWidth] 減 1,diff[i+stampHeight][j] 減 1,diff[i+stampHeight][j+stampWidth] 加 1。這里 diff 矩陣用于記錄每個位置的變化量。

3.遍歷 grid 中的每一行,使用滾動數(shù)組的方式還原 cntpre 數(shù)組,并通過它們來計算每列中為 0 的位置的數(shù)量。同時,如果某個位置 (i, j) 的值為 0 且它所在列中沒有其他的 0,則返回 false;否則返回 true。

時間復(fù)雜度為 O(mn),其中 m 和 n 分別表示矩陣 grid 的行數(shù)和列數(shù)。這是因為函數(shù)需要遍歷整個矩陣,并對每個位置進(jìn)行常數(shù)次操作。同時,二維前綴和、二維差分和滾動數(shù)組優(yōu)化的時間復(fù)雜度也都是 O(mn)。

空間復(fù)雜度為 O(mn),因為函數(shù)中創(chuàng)建了兩個 m+1 行 n+1 列的二維數(shù)組 sumdiff,以及一個長度為 n+1 的一維數(shù)組 cntpre。這些數(shù)組所占用的總空間為 (m+1)(n+1) + 2(n+1) = mn + 3m + 3n + 3,即 O(mn)。

go完整代碼如下:

package main

import "fmt"

func main() {
	grid := [][]int{{1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}}
	stampHeight := 4
	stampWidth := 3
	isPossibleToStamp := possibleToStamp(grid, stampHeight, stampWidth)
	fmt.Println(isPossibleToStamp)
}

func possibleToStamp(grid [][]int, stampHeight, stampWidth int) bool {
	m, n := len(grid), len(grid[0])
	sum := make([][]int, m+1)
	sum[0] = make([]int, n+1)
	diff := make([][]int, m+1)
	diff[0] = make([]int, n+1)
	for i, row := range grid {
		sum[i+1] = make([]int, n+1)
		for j, v := range row { // grid 的二維前綴和
			sum[i+1][j+1] = sum[i+1][j] + sum[i][j+1] - sum[i][j] + v
		}
		diff[i+1] = make([]int, n+1)
	}

	for i, row := range grid {
		for j, v := range row {
			if v == 0 {
				x, y := i+stampHeight, j+stampWidth // 注意這是矩形右下角橫縱坐標(biāo)都 +1 后的位置
				if x <= m && y <= n && sum[x][y]-sum[x][j]-sum[i][y]+sum[i][j] == 0 {
					diff[i][j]++
					diff[i][y]--
					diff[x][j]--
					diff[x][y]++ // 更新二維差分
				}
			}
		}
	}

	// 還原二維差分矩陣對應(yīng)的計數(shù)矩陣,這里用滾動數(shù)組實現(xiàn)
	cnt := make([]int, n+1)
	pre := make([]int, n+1)
	for i, row := range grid {
		for j, v := range row {
			cnt[j+1] = cnt[j] + pre[j+1] - pre[j] + diff[i][j]
			if cnt[j+1] == 0 && v == 0 {
				return false
			}
		}
		cnt, pre = pre, cnt
	}
	return true
}

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將,福大大架構(gòu)師每日一題,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),rust,go

rust完整代碼如下:

fn main() {
    let grid = vec![
        vec![1, 0, 0, 0],
        vec![1, 0, 0, 0],
        vec![1, 0, 0, 0],
        vec![1, 0, 0, 0],
        vec![1, 0, 0, 0],
    ];
    let stamp_height = 4;
    let stamp_width = 3;
    let is_possible_to_stamp = possible_to_stamp(&grid, stamp_height, stamp_width);
    println!("{}", is_possible_to_stamp);
}

fn possible_to_stamp(grid: &[Vec<i32>], stamp_height: usize, stamp_width: usize) -> bool {
    let m = grid.len();
    let n = grid[0].len();
    let mut sum = vec![vec![0; n + 1]; m + 1];
    let mut diff = vec![vec![0; n + 1]; m + 1];

    for i in 0..m {
        for j in 0..n {
            sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
        }
    }

    for i in 0..m {
        for j in 0..n {
            if grid[i][j] == 0 {
                let x = i + stamp_height;
                let y = j + stamp_width;

                if x <= m && y <= n && sum[x][y] - sum[x][j] - sum[i][y] + sum[i][j] == 0 {
                    diff[i][j] += 1;
                    diff[i][y] -= 1;
                    diff[x][j] -= 1;
                    diff[x][y] += 1;
                }
            }
        }
    }

    let mut cnt = vec![0; n + 1];
    let mut pre = vec![0; n + 1];

    for i in 0..m {
        for j in 0..n {
            cnt[j + 1] = cnt[j] + pre[j + 1] - pre[j] + diff[i][j];

            if cnt[j + 1] == 0 && grid[i][j] == 0 {
                return false;
            }
        }

        std::mem::swap(&mut cnt, &mut pre);
    }

    true
}

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將,福大大架構(gòu)師每日一題,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),rust,go

c語言完整代碼如下:

#include <stdio.h>
#include <stdlib.h>

int possibleToStamp(int** grid, int gridSize, int* gridColSize, int stampHeight, int stampWidth) {
    int m = gridSize, n = *gridColSize;
    int** sum = (int**)malloc(sizeof(int*) * (m + 1));
    for (int i = 0; i <= m; i++) {
        sum[i] = (int*)malloc(sizeof(int) * (n + 1));
    }
    int** diff = (int**)malloc(sizeof(int*) * (m + 1));
    for (int i = 0; i <= m; i++) {
        diff[i] = (int*)malloc(sizeof(int) * (n + 1));
    }

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
        }
    }

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (grid[i][j] == 0) {
                int x = i + stampHeight, y = j + stampWidth;
                if (x <= m && y <= n && sum[x][y] - sum[x][j] - sum[i][y] + sum[i][j] == 0) {
                    diff[i][j]++;
                    diff[i][y]--;
                    diff[x][j]--;
                    diff[x][y]++;
                }
            }
        }
    }

    int* cnt = (int*)malloc(sizeof(int) * (n + 1));
    int* pre = (int*)malloc(sizeof(int) * (n + 1));
    for (int i = 0; i <= n; i++) {
        cnt[i] = 0;
        pre[i] = 0;
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cnt[j + 1] = cnt[j] + pre[j + 1] - pre[j] + diff[i][j];
            if (cnt[j + 1] == 0 && grid[i][j] == 0) {
                free(cnt);
                free(pre);
                for (int k = 0; k <= m; k++) {
                    free(sum[k]);
                }
                free(sum);
                for (int k = 0; k <= m; k++) {
                    free(diff[k]);
                }
                free(diff);
                return 0;
            }
        }
        int* tmp = cnt;
        cnt = pre;
        pre = tmp;
    }

    free(cnt);
    free(pre);
    for (int i = 0; i <= m; i++) {
        free(sum[i]);
    }
    free(sum);
    for (int i = 0; i <= m; i++) {
        free(diff[i]);
    }
    free(diff);
    return 1;
}

int main() {
    int gridSize = 5, gridColSize = 4;
    int** grid = (int**)malloc(sizeof(int*) * gridSize);
    for (int i = 0; i < gridSize; i++) {
        grid[i] = (int*)malloc(sizeof(int) * gridColSize);
    }
    int data[5][4] = { {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0} };
    for (int i = 0; i < gridSize; i++) {
        for (int j = 0; j < gridColSize; j++) {
            grid[i][j] = data[i][j];
        }
    }
    int stampHeight = 4, stampWidth = 3;
    int isPossibleToStamp = possibleToStamp(grid, gridSize, &gridColSize, stampHeight, stampWidth);
    printf("%s\n", isPossibleToStamp ? "true" : "false");
    for (int i = 0; i < gridSize; i++) {
        free(grid[i]);
    }
    free(grid);
    return 0;
}

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將,福大大架構(gòu)師每日一題,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),rust,go

c++完整代碼如下:

#include <iostream>
#include <vector>

using namespace std;

bool possibleToStamp(vector<vector<int>>& grid, int stampHeight, int stampWidth) {
    int m = grid.size(), n = grid[0].size();
    vector<vector<int>> sum(m + 1, vector<int>(n + 1)), diff(m + 1, vector<int>(n + 1));

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
        }
    }

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (grid[i][j] == 0) {
                int x = i + stampHeight, y = j + stampWidth;
                if (x <= m && y <= n && sum[x][y] - sum[x][j] - sum[i][y] + sum[i][j] == 0) {
                    diff[i][j]++;
                    diff[i][y]--;
                    diff[x][j]--;
                    diff[x][y]++;
                }
            }
        }
    }

    vector<int> cnt(n + 1), pre(n + 1);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cnt[j + 1] = cnt[j] + pre[j + 1] - pre[j] + diff[i][j];
            if (cnt[j + 1] == 0 && grid[i][j] == 0) {
                return false;
            }
        }
        swap(cnt, pre);
    }

    return true;
}

int main() {
    vector<vector<int>> grid{ {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0}, {1, 0, 0, 0} };
    int stampHeight = 4, stampWidth = 3;
    bool isPossibleToStamp = possibleToStamp(grid, stampHeight, stampWidth);
    cout << (isPossibleToStamp ? "true" : "false") << endl;
    return 0;
}

2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將,福大大架構(gòu)師每日一題,矩陣,算法,數(shù)據(jù)結(jié)構(gòu),rust,go文章來源地址http://www.zghlxwxcb.cn/news/detail-699554.html

到了這里,關(guān)于2023-05-11:給你一個 m x n 的二進(jìn)制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • LeetCode 1253. 重構(gòu) 2 行二進(jìn)制矩陣

    力扣題目鏈接:https://leetcode.cn/problems/reconstruct-a-2-row-binary-matrix/ 給你一個? 2 ?行 n 列的二進(jìn)制數(shù)組: 矩陣是一個二進(jìn)制矩陣,這意味著矩陣中的每個元素不是? 0 ?就是? 1 。 第 0 行的元素之和為? upper 。 第 1 行的元素之和為 lower 。 第 i 列(從 0 開始編號)的元素之和為

    2024年02月11日
    瀏覽(26)
  • 【每日一題】1253. 重構(gòu) 2 行二進(jìn)制矩陣

    給你一個 2 行 n 列的二進(jìn)制數(shù)組: 矩陣是一個二進(jìn)制矩陣,這意味著矩陣中的每個元素不是 0 就是 1。 第 0 行的元素之和為 upper。 第 1 行的元素之和為 lower。 第 i 列(從 0 開始編號)的元素之和為 colsum[i],colsum 是一個長度為 n 的整數(shù)數(shù)組。 你需要利用 upper,lower 和 colsu

    2024年02月12日
    瀏覽(88)
  • 【1091. 二進(jìn)制矩陣中的最短路徑】

    【1091. 二進(jìn)制矩陣中的最短路徑】

    來源:力扣(LeetCode) 描述: 給你一個 n x n 的二進(jìn)制矩陣 grid 中,返回矩陣中最短 暢通路徑 的長度。如果不存在這樣的路徑,返回 -1 。 二進(jìn)制矩陣中的 暢通路徑 是一條從 左上角 單元格(即, (0, 0) )到 右下角 單元格(即, (n - 1, n - 1) )的路徑,該路徑同時滿足下述要

    2024年02月08日
    瀏覽(23)
  • ?LeetCode解法匯總253. 重構(gòu) 2 行二進(jìn)制矩陣

    https://github.com/September26/java-algorithms 給你一個? 2 ?行? n ?列的二進(jìn)制數(shù)組: 矩陣是一個二進(jìn)制矩陣,這意味著矩陣中的每個元素不是? 0 ?就是? 1 。 第? 0 ?行的元素之和為? upper 。 第? 1 ?行的元素之和為? lower 。 第? i ?列(從? 0 ?開始編號)的元素之和為? colsum[i] ,

    2024年02月11日
    瀏覽(22)
  • 如何將一個實例的內(nèi)存二進(jìn)制內(nèi)容讀出來?

    如何將一個實例的內(nèi)存二進(jìn)制內(nèi)容讀出來?

    在《如何計算一個實例占用多少內(nèi)存?》中我們知道一個值類型或者引用類型的實例在內(nèi)存中占多少字節(jié)。如果我們知道這段連續(xù)的字節(jié)序列的初始地址,我們就能夠?qū)⒋碓搶嵗淖止?jié)內(nèi)容讀取出來。在接下來的內(nèi)容中,我們將利用一個簡單的方法輸出指定實例的字節(jié)序列

    2024年02月08日
    瀏覽(23)
  • 二進(jìn)制部署高可用k8s集群V1.20.11版本

    二進(jìn)制部署高可用k8s集群V1.20.11版本

    單master架構(gòu)圖 master節(jié)點 node1節(jié)點 node2節(jié)點 ??Etcd是一個分布式鍵值存儲系統(tǒng), K8s使用Etcd進(jìn)行數(shù)據(jù)存儲 ,所以先準(zhǔn)備一個Etcd數(shù)據(jù)庫,為解決Etcd單點故障,應(yīng)采用集群方式進(jìn)行部署,這里使用3臺組件集群,可容忍1臺機(jī)器故障,當(dāng)然 也可以使用5臺組件集群,可容忍2臺機(jī)器故

    2024年01月22日
    瀏覽(30)
  • 【算法】Reconstruct a 2-Row Binary Matrix 重構(gòu) 2 行二進(jìn)制矩陣

    給你一個 2 行 n 列的二進(jìn)制數(shù)組: 矩陣是一個二進(jìn)制矩陣,這意味著矩陣中的每個元素不是 0 就是 1。 第 0 行的元素之和為 upper。 第 1 行的元素之和為 lower。 第 i 列(從 0 開始編號)的元素之和為 colsum[i],colsum 是一個長度為 n 的整數(shù)數(shù)組。 你需要利用 upper,lower 和 colsu

    2024年02月12日
    瀏覽(30)
  • 2023-06-14 LeetCode每日一題(二進(jìn)制字符串前綴一致的次數(shù))

    點擊跳轉(zhuǎn)到題目位置 給你一個長度為 n 、下標(biāo)從 1 開始的二進(jìn)制字符串,所有位最開始都是 0 。我們會按步翻轉(zhuǎn)該二進(jìn)制字符串的所有位(即,將 0 變?yōu)?1)。 給你一個下標(biāo)從 1 開始的整數(shù)數(shù)組 flips ,其中 flips[i] 表示對應(yīng)下標(biāo) i 的位將會在第 i 步翻轉(zhuǎn)。 二進(jìn)制字符串 前綴

    2024年02月08日
    瀏覽(98)
  • 【每日一題Day218】LC1091 二進(jìn)制矩陣中的最短路徑 | BFS

    你駕駛出租車行駛在一條有 n 個地點的路上。這 n 個地點從近到遠(yuǎn)編號為 1 到 n ,你想要從 1 開到 n ,通過接乘客訂單盈利。你只能沿著編號遞增的方向前進(jìn),不能改變方向。 乘客信息用一個下標(biāo)從 0 開始的二維數(shù)組 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客

    2024年02月08日
    瀏覽(87)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode1091. 二進(jìn)制矩陣中的最短路徑

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 雙分裂蛇:是求二維表中從起點到終點的經(jīng)典思路(也是求無權(quán)圖的最短路徑問題的經(jīng)典解法)。創(chuàng)建兩條分裂蛇,分別從起點和

    2024年04月26日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包