문자열 배열에서 A 0과 B 1로 구성된 가장 긴 부분 집합의 길이를 찾습니다.
이 문제에서는 최대 A 0과 B1을 포함하는 가장 긴 부분 집합을 찾아야 합니다. 우리가 해야 할 일은 배열 요소를 사용하여 가능한 모든 하위 집합을 찾고 최대 A 0 및 B1 을 포함하는 가장 긴 하위 집합을 찾는 것입니다.
이 튜토리얼에서는 먼저 문제를 해결하기 위한 재귀적 방법을 배웁니다. 그런 다음 동적 프로그래밍 방법을 사용하여 코드를 최적화합니다.
문제 설명 - N개의 이진 문자열을 포함하는 배열이 제공됩니다. 또한 A와 B 정수가 제공됩니다. A 0 및 B1 이상을 포함하지 않도록 주어진 이진 문자열을 사용하여 가장 긴 하위 집합을 만들어야 합니다.
예
으아악 으아악지침
가장 긴 부분 집합은 2개의 0과 1개의 1을 포함하는 { "0", "0", "1"}입니다.
으아악 으아악지침
가장 긴 부분 집합은 {"0", "101", "0", "1"}, 3개의 0 및 3개의 1입니다.
방법 1
이번 섹션에서는 재귀를 이용한 간단한 방법을 배워보겠습니다. 배열 요소를 사용하여 가능한 모든 하위 집합을 구성하고 A 0 및 B 1 을 포함하는 가장 긴 하위 집합을 찾습니다.
알고리즘
1단계 - 주어진 이진 문자열에서 총 0 개수를 계산하는 countZeros() 함수를 정의합니다.
1.1단계 - "count" 변수를 0으로 초기화합니다.
1.2단계 - for 루프를 사용하여 문자열을 반복합니다.
1.3단계 - i번째 인덱스의 문자가 "0"이면 "cnt" 값을 1만큼 늘립니다.
1.2단계 - "cnt" 변수의 값을 반환합니다.
2단계 - getMaxSubsetLen()은 정수 값을 반환하고 벡터 arr, int A, int B 및 index를 인수로 사용합니다.
3단계 - 함수 내에서 기본 사례를 정의합니다. 인덱스가 벡터의 크기와 같거나 A와 B의 값이 모두 0인 경우 0을 반환합니다.
4단계 - 이제 인덱스에서 문자열의 총 0 개수를 셉니다.
5단계 - 문자열 길이에서 총 1의 수를 빼서 총 1의 수를 구합니다.
6단계 - "첫 번째" 변수를 0으로 초기화합니다.
7단계 - 0과 1의 총 개수가 각각 A와 B보다 작은 경우 현재 이진 문자열을 포함합니다. 1 + 재귀 함수 호출의 반환 값을 저장합니다. 재귀 호출을 할 때 A와 B에서 0과 1을 뺍니다.
8단계 - 현재 문자열을 제외하고 결과 값을 "두 번째" 변수에 저장합니다.
9단계 - 첫 번째와 두 번째의 최대값을 반환합니다.
예
으아악출력
으아악시간 복잡도 - N개의 배열 요소를 사용하여 가능한 모든 하위 집합을 찾았으므로 O(2N)입니다.
공간 복잡성 - O(1)
방법 2
이 섹션에서는 위의 방법을 최적화했습니다. 우리는 이 문제를 해결하기 위해 동적 프로그래밍 방법을 사용합니다. 문제의 시간 복잡도를 줄이기 위해 이전 상태의 결과를 저장합니다.
알고리즘
1단계 - 위의 방법에서 했던 것처럼 특정 바이너리 문자열에서 총 0의 개수를 계산하는 countZeros() 함수를 정의하세요.
-
2단계 - 이전 상태의 결과를 저장하기 위해 A x B x N 크기의 3D 벡터를 만듭니다. 목록에서 총 0이 A와 같고 1이 B와 같을 때 인덱스 "I"에 하위 집합의 길이를 저장합니다. 또한 이를 getMaxSubsetLen() 함수에 인수로 전달합니다.
3단계 - 위의 방법에서 했던 것처럼 기본 사례를 정의합니다.
4단계 - dpTable[A][B][index] 값이 0보다 크면 상태가 계산되어 해당 값이 반환된다는 의미입니다.
5단계 - 현재 문자열에서 0과 1의 총 개수를 셉니다.
6단계 - 현재 문자열을 포함하거나 제외한 결과 값을 가져옵니다.
7단계 - max() 함수를 사용하여 첫 번째와 두 번째의 최대값을 구하고, 이를 dpTable[A][B][index]에 저장하고
를 반환합니다.
예
으아악출력
으아악시간 복잡도 - O(A*B*N) 결과를 얻으려면 3D 목록을 채워야 하기 때문입니다.
공간 복잡도 - O(A*B*N) 왜냐하면 동적 프로그래밍 방법에 3D 목록을 사용하기 때문입니다.
위 내용은 문자열 배열에서 A 0과 B 1로 구성된 가장 긴 부분 집합의 길이를 찾습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SPLIT() 함수는 문자열을 지정된 구분 기호로 배열로 분할하여 각 요소가 원래 문자열의 구분 기호로 구분된 부분인 문자열 배열을 반환합니다. 사용법에는 쉼표로 구분된 값 목록을 배열로 분할하고, 경로에서 파일 이름을 추출하고, 이메일 주소를 사용자 이름과 도메인으로 분할하는 것이 포함됩니다.

Java에서 문자열을 정렬하는 방법: Arrays.sort() 메서드를 사용하여 문자열 배열을 오름차순으로 정렬합니다. 문자열 목록을 오름차순으로 정렬하려면 Collections.sort() 메서드를 사용합니다. 문자열의 사용자 정의 정렬을 위해 Comparator 인터페이스를 사용하십시오.

C 언어에서 \0은 널 문자 또는 종결자라고 하는 문자열의 끝 표시입니다. 문자열은 바이트 배열로 메모리에 저장되므로 컴파일러는 \0을 통해 문자열의 끝을 인식하여 문자열이 올바르게 처리되도록 합니다. \0 작동 방식: 컴파일러는 \0을 발견하면 문자 읽기를 중지하고 후속 문자는 무시됩니다. \0 자체는 저장 공간을 차지하지 않습니다. 이점에는 안정적인 문자열 처리, 향상된 효율성(끝을 찾기 위해 전체 배열을 스캔할 필요 없음), 손쉬운 비교 및 조작이 포함됩니다.

args는 Java의 명령줄 인수를 나타내며 프로그램이 시작될 때 프로그램에 전달되는 인수 목록을 포함하는 문자열 배열입니다. 이는 기본 메소드에서만 사용할 수 있으며 기본값은 인덱스로 액세스할 수 있는 각 매개변수가 있는 빈 배열입니다. args는 프로그램이 시작될 때 입력 데이터를 구성하거나 제공하기 위해 명령줄 인수를 수신하고 처리하는 데 사용됩니다.

args는 명령줄 매개변수 또는 외부 입력의 문자열 배열을 얻는 데 사용되는 Java 기본 메소드의 특수 매개변수 배열입니다. args 배열에 액세스함으로써 프로그램은 이러한 인수를 읽고 필요에 따라 처리할 수 있습니다.

C 언어 프로그래밍 소프트웨어에서 한자 정렬 기능을 구현하는 방법은 무엇입니까? 현대사회에서 한자 정렬 기능은 많은 소프트웨어에서 필수적인 기능 중 하나이다. 워드 프로세싱 소프트웨어, 검색 엔진 또는 데이터베이스 시스템에서 중국어 텍스트 데이터를 더 잘 표시하고 처리하려면 중국어 문자를 정렬해야 합니다. C언어 프로그래밍에서 한자 정렬 기능을 어떻게 구현하나요? 그 중 하나의 방법을 아래에 간략하게 소개합니다. 먼저 C언어에서 한자 정렬 기능을 구현하기 위해서는 문자열 비교 기능을 사용해야 한다. 란

AI 기술과 PHP 기능을 결합해 애플리케이션의 기능을 강화했습니다. 특정 AI 애플리케이션에는 다음이 포함됩니다. Naive Bayes와 같은 기계 학습 알고리즘을 사용하여 텍스트를 분류합니다. 단어 분할 및 형태소 분석과 같은 자연어 처리 기술을 사용하여 심층적인 텍스트 분석을 수행합니다.

C++ 프로그램 성능에 대한 함수의 영향에는 함수 호출 오버헤드, 로컬 변수 및 객체 할당 오버헤드가 포함됩니다. 함수 호출 오버헤드: 스택 프레임 할당, 매개변수 전송 및 제어 전송을 포함하며 이는 작은 함수에 상당한 영향을 미칩니다. 지역 변수 및 개체 할당 오버헤드: 지역 변수 또는 개체 생성 및 소멸이 많으면 스택 오버플로 및 성능 저하가 발생할 수 있습니다.
