MoveZeros 메서드를 만들고 배열을 탐색하고 배열에 있는 0의 수를 계산합니다. 카운트 크기에 따라 모든 최종 셀을 0으로 만듭니다. 배열 길이가 null이거나 비어 있으면 처리하지 않고 반환합니다. 최종 결과는 nums Array에 있습니다. 배열을 한 번 순회하므로 시간 복잡도는 O(N)입니다. 시간 복잡도 - O(N) 공간 복잡성 - O(1) 예시 public class Arrays{ public void MoveZeros(int[] nums){ if (nums
X의 각 문자가 모두 Y를 얻기 위해 다른 문자로 대체될 수 있고 그 반대의 경우도 마찬가지인 경우 두 문자열 X 및 Y를 동형이라고 합니다. 예를 들어 문자열 ACAB 및 XCXY를 고려하십시오. 문자의 모든 발생은 문자 순서를 유지하면서 다른 문자로 대체되어야 합니다. 두 캐릭터는 같은 캐릭터에 매핑될 수 없지만 한 캐릭터는 자신에게 매핑될 수 있습니다. 예시 1 입력 − s =계란, t =추가 출력 - 사실 예시 2 입력 − s =푸, t =막대 출력 - 거짓 시간 복잡도 - O(N) 공간 복잡성 - O(N) 코드 pu
주어진 문자열 입력에서 2개의 포인터 i 및 j를 사용하여 슬라이딩 창 기술을 사용합니다. i와 j는 모두 문자열에서 같은 문자를 가리킵니다. 문자열을 탐색하고 목록에 추가합니다. 반복되는 문자가 발견되면 목록에서 제거하고 목록에 추가하십시오. 예시 1 입력 − s =abcabcbb 출력 - 3 설명 − 답은 길이가 3인 abc입니다. 예시 2 입력 - s =bbbbbb 출력 − 1 설명 − 답은 길이가 1인 b입니다. 시간 복잡도 - O(N) 공간 복잡성 - O(N) 예 public class Arrays{
LongestIncreaingSubsequence는 배열에서 연속 하위 시퀀스의 정수를 반환합니다. 이 메서드에는 숫자를 반복하고 추적하는 for 루프가 있습니다. 최종 결과에는 Max가 계산됩니다. 모든 요소를 한 번만 방문하기 때문에 시간 복잡도는 O(N)이고 저장 공간을 사용하지 않기 때문에 공간 복잡도는 O(1)입니다. 시간 복잡도 - O(N) 공간 복잡성 - O(1) 예시 − {2,4,6,5,8} 출력 - 3 예시 public class Arrays{ public int longestIncrea
피보나치 수열은 1 또는 0으로 시작하고 그 뒤에 1이 오는 일련의 숫자로, 각 숫자(피보나치 수라고 함)가 동일하다는 규칙에 따라 진행됩니다. 앞의 두 숫자의 합으로. 하향식 접근 방식은 큰 문제를 작고 이해할 수 있는 덩어리로 나누는 데 중점을 둡니다. 공간 복잡도는 숫자 크기와 동일한 추가 배열 메모리를 생성하기 때문에 O(N)입니다. 시간 복잡도 - O(N) 공간 복잡성 - O(N) 예시 public class DynamicProgramming{ public int fibonacciTopdownAppr
피보나치 수열은 1 또는 0으로 시작하고 그 뒤에 1이 오는 일련의 숫자로, 각 숫자(피보나치 수라고 함)가 동일하다는 규칙에 따라 진행됩니다. 앞의 두 숫자의 합으로. 상향식 접근 방식은 먼저 근본적인 수준에서 작은 문제를 해결한 다음 전체적이고 완전한 솔루션으로 통합하는 데 중점을 둡니다. 시간 복잡도 - O(N) 공간 복잡성 - O(N) 예시 public class DynamicProgramming{ public int fibonacciBottomupApproach(int n){
MinimumStepstoOneTopdownApproach는 정수 n과 정수 배열을 입력으로 사용합니다. 매개변수 n은 총 요소 수를 포함합니다. 초기 조건은 n이 1인지 여부를 확인합니다. n이 1이면 0을 반환합니다. op1, op2 및 op3을 최대 값으로 초기화합니다. n mod 3이 0이면 MinimumStepstoOneTopdownApproach를 재귀적으로 호출하고 op1에 할당하고, n mod 3이 0이면 MinimumStepstoOneTopdownApproach를 재귀적으로 호출하고 op2에 할당합니다. 그렇지 않으
MinimumStepstoOneBottomdownApproach는 정수 n을 입력으로 사용합니다. 매개변수 n은 총 요소 수를 포함합니다. 초기 조건은 n이 1인지 여부를 확인합니다. n이 1이면 0을 반환합니다. op1, op2 및 op3을 최대값으로 초기화합니다. n mod 3이 0과 같으면 MinimumStepstoOneBottomdownApproach를 재귀적으로 호출하고 op1에 할당하고, n mod 3이 0이면 MinimumStepstoOneBottomdownApproach를 재귀적으로 호출하고 op2에 할당합니다. 그렇
CoinChangeTopDownApproach는 4개의 매개변수를 사용하고, n은 금액이고, 동전 배열은 금액을 계산해야 하는 동전을 포함하고, t는 동전의 총 수이고, dp 배열은 모든 사전 계산된 값. 금액이 0이면 0을 반환합니다. 값이 이미 계산된 경우 dp 배열에서 반환합니다. 값이 계산되지 않으면 CoinChangeTopDownApproach를 재귀적으로 호출합니다. 시간 복잡도 - O(N) 공간 복잡성 - O(N) 예 public class DynamicProgramming{ public int
CoinChangeBottomUpApproach는 3개의 매개변수를 취합니다. 입력 n은 금액이고, coin 배열은 총 동전 수를 포함하고, t는 총 동전 수를 포함합니다. 이전에 계산된 값을 저장하는 동적 배열을 선언합니다. 배열을 반복하고 금액을 계산하는 데 필요한 최소 동전을 계산합니다. 계산이 이미 완료된 경우 동적 배열에서 값을 가져옵니다. 시간 복잡도 − 오(N) 공간 복잡성 − 오(N) 예 public class DynamicProgramming{ public int CoinChangeBott
반복적 접근에서 우리는 2개의 큐를 생성해야 합니다. 하나의 큐는 왼쪽 자식을 저장하고 다른 큐는 오른쪽 자식 값을 저장합니다. 트리가 비어 있으면 루트 노드를 통과하는 수직 축에 대칭입니다. 그렇지 않으면 두 하위 트리의 루트 노드 값이 동일한지 확인합니다. 그렇다면 왼쪽 하위 트리와 오른쪽 하위 트리가 대칭인지 확인하십시오. 왼쪽 자식 값과 오른쪽 자식 값을 queue1에 넣고 오른쪽 자식과 왼쪽 자식 값을 queue1에 넣습니다. 예 public class TreesPgm{ public class Nod
재귀적 접근 방식에서 우리는 트리가 대칭인지 여부를 찾기 위해 처음에 트리가 null인지 여부를 확인합니다. 트리가 null이면 대칭이고 트리가 null이 아니면 issymmetricmirror 메서드를 호출합니다. isSymmetricMirror에서 우리는 다음을 얻습니다. 왼쪽 자식과 오른쪽 자식의 값, 왼쪽과 오른쪽 자식이 모두 null이면 대칭으로 간주하고 값 중 하나가 null이면 대칭이 아닌 것으로 간주하고 마침내 왼쪽과 오른쪽을 전달하여 issymmetric 메서드를 재귀적으로 호출합니다. 자식 가치. 예시 public
이진 검색 트리를 반전시키기 위해 노드를 매개변수로 사용하는 InvertABinarySearchTree 메서드를 호출합니다. 노드가 null이면 null을 반환하고, 노드가 null이 아니면 왼쪽 및 오른쪽 자식 값을 전달하여 InvertABinarySearchTree를 재귀적으로 호출합니다. 오른쪽 자식 값을 왼쪽 자식에 할당하고 왼쪽 자식 값을 오른쪽 자식에 할당합니다. 최종 출력은 자체 미러 이미지가 될 트리로 구성됩니다. 예시 public class TreesPgm{ public class Node{
트리는 노드 요소보다 작은 왼쪽 자식과 노드 요소보다 큰 오른쪽 자식이 모두 있는 경우 이진 검색 트리입니다. 처음에 노드에 값이 있는지 확인하고 노드가 null이면 유효한 이진 검색 트리로 간주하고 true를 반환합니다. 노드 null 결과를 확인한 후 노드, 최소값 및 최대값을 전달하여 재귀 메서드 isValidBST를 호출합니다. 루트 값이 최소값보다 작고 루트 값이 최대값보다 크면 이진 탐색 트리가 아닌 것으로 간주하고 false를 반환합니다. 그렇지 않으면 모든 노드를 확인할 때까지 왼쪽 및 오른쪽 값을 전달하여 isVal
HasPathsum은 2개의 매개변수를 취합니다. 하나는 트리 노드이고 다른 하나는 합계 값입니다. 처음에는 노드가 null인지 여부를 확인하고 노드가 null이면 false를 반환합니다. 노드가 null이 아니면 HasPathSum 재귀 메서드를 호출합니다. 각 재귀 단계에서 계속해서 노드 값에서 합계 값을 뺍니다. 합계 값이 0에 도달하면 주어진 트리에 합계와 동일한 경로가 있고 true를 반환한다는 결론에 도달합니다. 예시 public class TreesPgm{ public class Node{ &nb
우리는 낮음, 중간, 높음의 3점슛을 해야 합니다. 시작 시 낮은 포인터와 중간 포인터를 사용하고 높은 포인터는 주어진 배열의 끝을 가리킬 것입니다. 배열 [mid] =0이면 배열 [mid]를 배열 [low]로 바꾸고 두 포인터를 한 번 증가시킵니다. 배열 [mid] =1이면 스와핑이 필요하지 않습니다. 중간 포인터를 한 번 증가시킵니다. 배열 [mid] =2이면 배열 [mid]를 배열 [high]로 바꾸고 상위 포인터를 한 번 감소시킵니다. 시간 복잡도 - O(N) 예시 using System; namespace Cons
낮은, 높은 두 포인터를 가져 가라. 처음에는 낮은 포인터를 사용하고 지정된 배열의 끝은 높은 포인터를 가리킵니다. 배열 [low] =0이면 스와핑이 필요하지 않습니다. array [low] =1이면 스와핑이 필요합니다. 상위 포인터를 한 번 감소시킵니다. 시간 복잡도 - O(N) 예 using System; namespace ConsoleApplication{ public class Arrays{ public void SwapZerosOnes(int[] arr){
배열과 숫자 k가 주어지면 문제는 배열을 k번 회전해야 한다는 것입니다. 주어진 숫자가 3이면 배열을 3번 회전해야 합니다. 배열, 시작 및 끝을 매개변수로 사용하는 반전 함수를 만듭니다. 첫 번째 단계에서는 0에서 배열 길이로 reverse 메소드를 호출합니다. 2단계에서는 0에서 k-1로 역방향 메서드를 호출합니다. 세 번째 단계에서는 k+1에서 배열 길이로 역방향 메서드를 호출합니다. 예 using System; namespace ConsoleApplication{ public c
배열은 이미 정렬되어 있으므로 두 개의 포인터 ii와 jj를 유지할 수 있습니다. 여기서 ii는 느린 주자이고 jj는 빠른 주자입니다. nums[i] =nums[j]nums[i]=nums[j]인 한, 중복을 건너뛰기 위해 jj를 증가시킵니다. nums[j] !=nums[i]를 만나면 중복 실행이 종료되었으므로 해당 값을 nums[i + 1]nums[i+1]에 복사해야 합니다. 그런 다음 ii가 증가하고 jj가 배열의 끝에 도달할 때까지 동일한 프로세스를 다시 반복합니다. 시간 복잡도 - O(N) 예시 using System;
배열은 이미 정렬되어 있으므로 두 개의 포인터 ii와 jj를 유지할 수 있습니다. 여기서 ii는 느린 주자이고 jj는 빠른 주자입니다. nums[i] =nums[j]nums[i]=nums[j]인 한 jj를 증가시켜 중복을 건너뜁니다. nums[j] !=nums[i] 중복 실행이 종료되었으므로 해당 값을 nums[i + 1]nums[i+1]에 복사해야 합니다. 그런 다음 ii가 증가하고 jj가 배열의 끝에 도달할 때까지 동일한 프로세스를 다시 반복합니다. 새 배열을 생성합니다. 필터링된 배열의 모든 요소를 인덱스까지 복사하고 새