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

【算法與數(shù)據(jù)結(jié)構(gòu)】474、LeetCode一和零

這篇具有很好參考價值的文章主要介紹了【算法與數(shù)據(jù)結(jié)構(gòu)】474、LeetCode一和零。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。

一、題目

【算法與數(shù)據(jù)結(jié)構(gòu)】474、LeetCode一和零,算法,算法

二、解法

??思路分析:本題要找strs數(shù)組的最大子集,這個子集最多含有 m m m個0和 n n n個1。本題也可以抽象成一個01背包的問題。其中,strs內(nèi)的元素就是物品,而 m m m n n n就是背包的維度。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表最多有i個0和j個1的strs的最大子集的大小。遞歸數(shù)組可以由 d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i ? z e r o N u m ] [ j ? o n e N u m ] + 1 ) dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1) dp[i][j]=max(dp[i][j],dp[i?zeroNum][j?oneNum]+1)得出。和文章【算法與數(shù)據(jù)結(jié)構(gòu)】算法與數(shù)據(jù)結(jié)構(gòu)知識點中的01背包滾動數(shù)組一樣,循環(huán)需要從后往前進行,否則會將strs重復(fù)計算。
??程序如下

class Solution {
public:
	int findMaxForm(vector<string>& strs, int m, int n) {
		vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));	// 默認(rèn)初始化為0
		for (string str : strs) {	// 遍歷物品
			int oneNum = 0, zeroNum = 0;
			for (char c : str) {
				if (c == '0') zeroNum++;
				else oneNum++;
			}
			for (int i = m; i >= zeroNum; i--) { // 遍歷背包容量且從后向前遍歷!
				for (int j = n; j >= oneNum; j--) {
					dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
				}
			}
		}
		return dp[m][n];
	}
};

復(fù)雜度分析:

  • 時間復(fù)雜度: O ( K ? m ? n ) O(K*m*n) O(K?m?n),K為strs的長度。
  • 空間復(fù)雜度: O ( m ? n ) O(m*n) O(m?n)。

三、完整代碼

# include <iostream>
# include <vector>
# include <string>
using namespace std;

class Solution {
public:
	int findMaxForm(vector<string>& strs, int m, int n) {
		vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));	// 默認(rèn)初始化為0
		for (string str : strs) {	// 遍歷物品
			int oneNum = 0, zeroNum = 0;
			for (char c : str) {
				if (c == '0') zeroNum++;
				else oneNum++;
			}
			for (int i = m; i >= zeroNum; i--) { // 遍歷背包容量且從后向前遍歷!
				for (int j = n; j >= oneNum; j--) {
					dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
				}
			}
		}
		return dp[m][n];
	}
};

int main() {
	Solution s1;
	vector<string> strs = { "10", "0001", "111001", "1", "0" };
	int m = 5;
	int n = 3;
	int result = s1.findMaxForm(strs, m, n);
	cout << result << endl;
	system("pause");
	return 0;
}

end文章來源地址http://www.zghlxwxcb.cn/news/detail-814523.html

到了這里,關(guān)于【算法與數(shù)據(jù)結(jié)構(gòu)】474、LeetCode一和零的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 算法訓(xùn)練第四十三天|1049. 最后一塊石頭的重量 II 、494. 目標(biāo)和、474.一和零

    算法訓(xùn)練第四十三天|1049. 最后一塊石頭的重量 II 、494. 目標(biāo)和、474.一和零

    題目鏈接:1049. 最后一塊石頭的重量 II 參考:https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7%9A%84%E9%87%8D%E9%87%8FII.html 題目難度:中等 有一堆石頭,每塊石頭的重量都是正整數(shù)。 每一回合,從中選出任意兩塊石頭,然后將它們一起粉碎。假設(shè)石頭的重量分

    2023年04月09日
    瀏覽(19)
  • 【LeetCode題目詳解】第九章 動態(tài)規(guī)劃 part05 1049. 最后一塊石頭的重量 II 494. 目標(biāo)和 474.一和零(day43補)

    【LeetCode題目詳解】第九章 動態(tài)規(guī)劃 part05 1049. 最后一塊石頭的重量 II 494. 目標(biāo)和 474.一和零(day43補)

    有一堆石頭,用整數(shù)數(shù)組? stones 表示。其中? stones[i] 表示第 i 塊石頭的重量。 每一回合,從中選出 任意兩塊石頭 ,然后將它們一起粉碎。假設(shè)石頭的重量分別為? x 和? y ,且? x = y 。那么粉碎的可能結(jié)果如下: 如果? x == y ,那么兩塊石頭都會被完全粉碎; 如果? x != y

    2024年02月09日
    瀏覽(25)
  • 474. 一和零

    目錄 1、題目描述 2、思路:動態(tài)規(guī)劃01背包 2.1、確定dp數(shù)組及下標(biāo)含義 2.2、確定遞歸數(shù)組 2.3、初始化 2.4、確定遍歷順序 給你一個二進制字符串?dāng)?shù)組 strs 和兩個整數(shù) m 和 n 。 請你找出并返回 strs 的最大子集的長度,該子集中 最多 有 m 個 0 和 n 個 1 。 如果 x 的所有元素也是

    2024年02月03日
    瀏覽(21)
  • 代碼隨想錄Day36 動態(tài)規(guī)劃05 LeetCode T1049最后一塊石頭的重量II T494 目標(biāo)和 T474 一和零

    代碼隨想錄Day36 動態(tài)規(guī)劃05 LeetCode T1049最后一塊石頭的重量II T494 目標(biāo)和 T474 一和零

    理論基礎(chǔ)? :?代碼隨想錄Day34 LeetCode T343整數(shù)拆分 T96 不同的二叉搜索樹-CSDN博客 1.明白dp數(shù)組的含義 2.明白遞推公式的含義 3.初始化dp數(shù)組 4.注意dp數(shù)組的遍歷順序 5.打印dp數(shù)組排錯 題目鏈接:1049. 最后一塊石頭的重量 II - 力扣(LeetCode) 這題我們?nèi)匀徊捎脛右?guī)五部曲來寫,這題和

    2024年02月06日
    瀏覽(19)
  • 力扣:474. 一和零(動態(tài)規(guī)劃)(01背包)

    力扣:474. 一和零(動態(tài)規(guī)劃)(01背包)

    給你一個二進制字符串?dāng)?shù)組 strs 和兩個整數(shù) m 和 n 。 請你找出并返回 strs 的最大子集的長度,該子集中 最多 有 m 個 0 和 n 個 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1 : 輸入: strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3 輸出:

    2024年01月22日
    瀏覽(20)
  • 力扣第474題 一和零 c++ 動態(tài)規(guī)劃 01背包

    474. 一和零 中等 相關(guān)標(biāo)簽 數(shù)組? ?字符串? ?動態(tài)規(guī)劃 給你一個二進制字符串?dāng)?shù)組? strs ?和兩個整數(shù)? m ?和? n ?。 請你找出并返回? strs ?的最大子集的長度,該子集中? 最多 ?有? m ?個? 0 ?和? n ?個? 1 ?。 如果? x ?的所有元素也是? y ?的元素,集合? x ?是集合? y

    2024年02月06日
    瀏覽(27)
  • day43 | 1049. 最后一塊石頭的重量 II、494. 目標(biāo)和、474.一和零

    目錄: 1049. 最后一塊石頭的重量 II 有一堆石頭,用整數(shù)數(shù)組? stones ?表示。其中? stones[i] ?表示第? i ?塊石頭的重量。 每一回合,從中選出 任意兩塊石頭 ,然后將它們一起粉碎。假設(shè)石頭的重量分別為? x ?和? y ,且? x = y 。那么粉碎的可能結(jié)果如下: 如果? x == y ,那

    2024年02月12日
    瀏覽(26)
  • 【十九】【動態(tài)規(guī)劃】518. 零錢兌換 II、279. 完全平方數(shù)、474. 一和零,三道題目深度解析

    【十九】【動態(tài)規(guī)劃】518. 零錢兌換 II、279. 完全平方數(shù)、474. 一和零,三道題目深度解析

    動態(tài)規(guī)劃就像是解決問題的一種策略,它可以幫助我們更高效地找到問題的解決方案。這個策略的核心思想就是將問題分解為一系列的小問題,并將每個小問題的解保存起來。這樣,當(dāng)我們需要解決原始問題的時候,我們就可以直接利用已經(jīng)計算好的小問題的解,而不需要重

    2024年02月03日
    瀏覽(25)
  • Day43|動態(tài)規(guī)劃part05: 1049. 最后一塊石頭的重量 II、494. 目標(biāo)和、474. 一和零

    本題物品的重量為stones[i],物品的價值也為stones[i]。 對應(yīng)著01背包里的物品重量weight[i]和 物品價值value[i]。 確定dp數(shù)組以及下標(biāo)的含義 dp[j]表示容量(這里說容量更形象,其實就是重量)為j的背包,最多可以背最大重量為dp[j] 。 確定遞推公式 01背包的遞推公式為:dp[j] = ma

    2024年04月23日
    瀏覽(26)
  • 【Day43】代碼隨想錄之動態(tài)規(guī)劃0-1背包_1049. 最后一塊石頭的重量 II_494. 目標(biāo)和_ 474.一和零

    動態(tài)規(guī)劃理論基礎(chǔ) 動規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 打印。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。 打印dp日志和

    2024年02月22日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包