leetcode 474. Ones and Zeroes
원제 주소
https://leetcode.com/problems/ones-and-zeroes/description/
제목의 뜻
01열을 포함하는 벡터를 정하고, 사용할 수 있는 0과 1의 수를 정하며, 사용할 수 있는 범위 내에서 벡터에서 01열을 선택하고, 최대 벡터에서 01열을 얼마나 고를 수 있는지 구합니다.
사고의 방향
가방 문제의 변형이죠.점차적인 방정식은 dp[i][j][k]=max(dp[i-1]j[k], dp[i-1]j-count1(str[i])][k-count0(str[i])]) dp[i][j][k]는 앞의 i열을 표시하고 j개의 1, k개의 0을 정한 상황에서 꺼낼 수 있는 열의 수를 정한다.(코드에서 i, j, k는 모두 1부터 계산한다)
코드
1
다음 코드를 제출하여
runtime error
를 받았습니다. 실패한 예를 보면 01열의 수가 너무 많아서 dp수조가 너무 터졌을 것입니다.class Solution {
public:
int count0(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '0') count++;
}
return count;
}
int count1(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') count++;
}
return count;
}
int findMaxForm(vector& strs, int m, int n) {
int s = strs.size();
int dp[s + 1][m + 1][n + 1];
for (int j = 0; j <= m; j++) {
for (int k = 0; k <= n; k++) {
dp[0][j][k] = 0;
}
}
for (int i = 1; i <= s; i++) {
for (int j = 0; j <= m; j++) {
for (int k = 0; k <= n; k++) {
int temp = 0;
if (j >= count0(strs[i-1]) && k >= count1(strs[i-1]) ) {
temp = dp[i - 1][j - count0(strs[i-1])][k - count1(strs[i-1])] + 1;
}
dp[i][j][k] = max(dp[i - 1][j][k], temp);
}
}
}
return dp[s ][m ][n ];
}
};
그래서 아래 공간의 복잡도를 최적화하고 문자열의 수를 나타내는 1차원을 제거한다
2
class Solution {
public:
int count0(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '0') count++;
}
return count;
}
int count1(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') count++;
}
return count;
}
int findMaxForm(vector& strs, int m, int n) {
int s = strs.size();
int dp[m + 1][n + 1];
for (int j = 0; j <= m; j++) {
for (int k = 0; k <= n; k++) {
dp[j][k] = 0;
}
}
for (int i = 1; i <= s; i++) {
for (int j = m; j >= 0; j--) {
for (int k = n; k >= 0; k--) {
int temp = 0;
if (j >= count0(strs[i - 1]) && k >= count1(strs[i - 1]) ) {
temp = dp[j - count0(strs[i - 1])][k - count1(strs[i - 1])] + 1;
}
dp[j][k] = max(dp[j][k], temp);
}
}
}
return dp[m ][n ];
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.