돌이라고 하는 정렬된 숫자 목록이 있고 이것이 우리가 건너려고 하는 강에서 돌의 위치를 나타낸다고 가정합니다. 강을 건너려면 마지막 돌에서 끝내야 합니다. 이제 각 단계에서 k가 마지막 점프의 거리인 곳에서 (k - 1, k 또는 k + 1) 단계 앞으로 이동할 수 있습니다. 강을 건널 수 있는지 없는지 확인해야 합니다. 따라서 입력이 [0, 1, 3, 4, 5, 6, 8, 9, 13]과 같으면 출력은 True가 됩니다. 0에서 시작한 다음 1단위 점프하여 돌로 이동할 수 있기 때문입니다. 1, 2 유닛 3 이동, 2 유닛 5
이진 문자열이 있고 두 비트를 교환할 수 있다고 가정합니다. 모든 1을 함께 그룹화하는 데 필요한 최소 스왑 수를 찾아야 합니다. 1111000. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − data :=주어진 이진 문자열의 0과 1 목록 1:=0, n:=데이터 배열 길이로 설정 크기가 n인 배열 합계를 만들고 이를 0으로 채우고 summ[0] :=data[0]으로 설정 하나 :=하나 + 데이터[0] 1 ~ n – 1 범위의 i에 대해 sum[i] :=summ[i - 1] + 데이터[i] 하나 :=하나 + 데이터[i]
길이가 같은 숫자 nums0과 nums1의 두 목록과 거리로 d, 비용으로 c가 있는 다른 두 값이 있다고 가정합니다. nums0 또는 nums1의 인덱스 0에서 시작하여 두 목록의 최종 인덱스로 끝내고자 하는 경우. 이제 각 라운드에서 비용 비용을 위해 다른 목록으로 전환하도록 선택할 수 있습니다. 그러면 인덱스에 도달하는 데 드는 c 비용이 해당 지점의 값인 곳에서 최대 d 거리만큼 앞으로 이동할 수 있습니다. 따라서 작업을 완료하는 데 가능한 최소 총 비용을 찾아야 합니다. 따라서 입력이 nums0 =[2, 3, 10, 10
nums라는 숫자 목록과 또 다른 값 k가 있다고 가정하면 엄격하게 증가하는 크기 k의 부분 시퀀스 수를 찾아야 합니다. 답이 매우 크면 10^9 + 7로 수정하십시오. 따라서 입력이 nums =[2, 3, 4, 1] k =2와 같으면 크기가 2인 하위 시퀀스가 있으므로 출력은 3이 됩니다. [2, 3], [3, 4], [2, 4]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=10^9 + 7 dp :=숫자와 크기가 같고 1로 채워지는 목록 다음 k번 반복, 수행 dp - 1에서 0 사이의 범위 크기에 있는
각 간격에 세 개의 값[시작, 끝, 이익]이 포함된 간격 목록이 있다고 가정합니다. 우리는 한 번에 하나의 작업만 수행할 수 있으므로 얻을 수 있는 최대한의 이익을 찾아야 합니다. 따라서 입력이 간격 =[[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]]인 경우 출력은 350이 됩니다. 이 두 간격 [1, 2, 100] 및 [2, 100, 250]을 취할 수 있으므로 이 문제를 해결하기 위해 다음 단계를 따릅니다. d :=값으로 목록을 포함하는 빈 지도 n :=0 각(시작, 끝, 이익)에
nums라고 하는 숫자 목록과 또 다른 값 k가 있다고 가정하면 사전순으로 크기가 k인 가장 작은 부분 수열을 찾아야 합니다. 따라서 입력이 nums =[2, 3, 1, 10, 3, 4] k =3과 같으면 출력은 [1, 3, 4]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − l :=숫자의 크기, r :=k - 1 out :=새 목록 0~k 범위의 j에 대해 mn :=nums[r의 보수] r에서 l 사이의 i에 대해 다음을 수행합니다. =nums[i의 보수]이면 mn :=nums[i의 보수] 나는 :=나는
nums라는 숫자 목록과 다른 값 k가 있다고 가정하면 하위 목록에 정확히 k개의 고유 숫자가 있어야 하는 하위 목록의 수를 찾아야 합니다. 따라서 입력이 nums =[2, 2, 3, 4] k =2와 같으면 [2, 2, 3], [2, 3]과 같은 하위 목록이 있으므로 출력은 3이 됩니다. [3, 4]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − count() 함수를 정의합니다. K slot :=빈 지도, 기본적으로 모든 값은 0 i :=res :=0 각 인덱스 j와 값 x num에 대해 do 슬롯[x] :=슬롯[x]
하나의 N x M 이진 행렬이 있다고 가정합니다. 여기서 0은 빈 셀을 의미하고 1은 차단된 셀을 의미합니다. 이제 왼쪽 상단 모서리부터 시작하여 오른쪽 하단 모서리에 도달하는 방법의 수를 찾아야 합니다. 답이 매우 크면 10^9 + 7로 수정하십시오. 따라서 입력이 다음과 같으면 0 0 1 0 0 0 1 1 0 그러면 출력은 2가 됩니다. 오른쪽 아래로 이동하는 두 가지 방법이 있습니다:[오른쪽, 아래쪽, 오른쪽, 아래쪽] 및 [아래쪽, 오른쪽, 오른쪽, 아래쪽]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. −
이진 트리가 있다고 가정하면 이진 검색 트리로 가장 큰 하위 트리(최대 노드 수)를 찾아야 합니다. 따라서 입력이 다음과 같으면 그러면 출력은 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 최대 크기 :=[0] max_node :=[null] traverse() 함수를 정의합니다. 노드가 필요합니다. 노드가 null이면 null 반환 left :=traverse(노드의 왼쪽) right :=traverse(노드 오른쪽) lst :=왼쪽 + [노드 값] + 오른쪽 lst가 정렬되면 max_size[0]
nums라고 하는 숫자 목록과 또 다른 값 k가 있다고 가정하면 주어진 크기 k 목록의 겹치지 않는 세 하위 목록의 가장 큰 합을 찾아야 합니다. 따라서 입력이 nums =[2, 2, 2, -6, 4, 4, 4, -8, 3, 3, 3] k =3과 같으면 출력은 27이 됩니다. 하위 목록 [2, 2, 2], [4, 4, 4] 및 [3, 3, 3], 총합은 27입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − P :=[0] A의 각 x에 대해 다음을 수행합니다. P 끝에 P[-1] + x 삽입 Q :=[P[i + K
nums라는 숫자 목록과 또 다른 값 k가 있다고 가정하고 각 하위 목록의 길이가 ≥ k이고 엄격하게 증가하도록 목록을 하위 목록 목록으로 분할할 수 있는지 확인해야 합니다. 목록을 연속적으로 분할할 필요는 없습니다. 따라서 입력이 nums =[6, 7, 5, 10, 13] k =2와 같으면 분할이 [5, 6] 및 [7, 10, 13]이므로 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − c :=숫자와 그 개수의 요소를 포함하는 지도 max_count :=c의 모든 주파수의 최대값 max_coun
nums라고 하는 숫자 목록이 있고 비감소 순서로 정렬되어 있다고 가정하면 각 하위 시퀀스의 길이가 최소 3이고 연속적으로 증가하도록 여러 하위 시퀀스로 분할할 수 있는지 확인해야 합니다. 따라서 입력이 nums =[2, 3, 4, 4, 5, 6, 7]과 같으면 목록을 [2, 3, 4] 및 [4, 5, 6, 7]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − counts :=num의 요소와 해당 개수를 포함하는 지도 starts :=새 목록 ends :=새 목록 정렬된 순서로 개수 항목의 각 x에 대해 다음을 수행합니다
nums라는 숫자 목록이 있다고 가정하고 두 개의 연속 숫자 사이의 차이가 양수와 음수를 번갈아 가며 나타나는 가장 긴 부분 수열의 크기를 찾아야 합니다. 그리고 첫 번째 차이는 양수일 수도 있고 음수일 수도 있습니다. 따라서 입력이 nums =[6, 10, 4, 2, 3, 9, 4, 7]과 같으면 출력은 6이 됩니다. 가능한 필수 하위 시퀀스는 [6, 10, 2, 9, 4입니다. , 7] 및 차이점은 [4, -8, 7, -5, 3]입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. &minuS; n :=숫자 크기 dp
nums라는 숫자 목록이 있다고 가정하고 가장 긴 산술 부분 수열의 길이를 찾아야 합니다. 시퀀스 S[i]는 S[i+1] - S[i]가 범위(0 ≤ i
세 개의 문자열 s1, s2, s3이 있다고 가정하고 가장 긴 공통 부분 수열의 길이를 찾아야 합니다. 따라서 입력이 s1 =ababchemxde s2 =pyakcimde s3 =oauctime과 같으면 가장 긴 공통 부분 시퀀스가 acme이므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=s1의 크기, n :=s2의 크기, o :=s3의 크기 dp :=크기 (o + 1) x (n + 1) x (m + 1)의 3D 행렬 1~m 범위의 i에 대해 다음을 수행합니다. 1~n 범위의 j에 대해
이진 트리가 있다고 가정합니다. 합이 짝수인 가장 긴 경로의 길이를 찾아야 합니다. 따라서 입력이 이미지와 같으면 경로가 [5, 2, 4, 8, 5], sum =24(짝수)이므로 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − dfs() 함수를 정의합니다. 노드가 필요합니다. 노드가 null이면 쌍(0, -inf)을 반환 (left_0, left_1) :=dfs(노드의 왼쪽) (right_0, right_1) :=dfs(노드의 오른쪽) 노드 값이 홀수이면 ans :=ans의 최대값, (left_1
2D 행렬이 있다고 가정하고 가장 긴 엄격하게 증가하는 경로의 길이를 찾아야 합니다. 경로를 가로지르기 위해 위, 아래, 왼쪽, 오른쪽 또는 대각선으로 이동할 수 있습니다. 따라서 입력이 다음과 같으면 2 4 6 1 5 7 3 3 9 가장 긴 경로는 [1, 2, 4, 6, 7, 9]이므로 출력은 6이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n := row count of matrix , m := column count of matrix moves := a list of pairs to move u
소문자 문자열 s가 있다고 가정합니다. 우리는 s에서 가장 긴 회문 부분 수열의 길이를 찾아야 합니다. 따라서 입력이 s =aolpeuvekyl과 같으면 회문이 레벨이므로 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=s의 크기 dp() 함수를 정의합니다. i, j i가 j와 같으면 1을 반환 j일 때 0을 반환 그렇지 않으면 s[i]가 s[j]와 같으면 2 + dp(i + 1, j - 1)를 반환 그렇지 않으면 dp(i + 1, j) 및 dp(i, j - 1)의 최대값을 반환
인접 목록으로 표현되는 하나의 방향성 비순환 그래프가 있다고 가정합니다. 노드 반복 없이 그래프에서 가장 긴 경로를 찾아야 합니다. 따라서 입력이 다음과 같으면 2이고 길이는 4이므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ans :=0 n :=그래프의 노드 수 table :=크기가 n인 목록과 -1로 채우기 dfs() 함수를 정의합니다. 이것은 당신을 걸릴 것입니다 테이블[u]가 -1이 아니면 반환 테이블[u] p_len :=0 그래프[u]의 각 vectex v에 대해 다음을 수행
문자열 s가 있다고 가정해 보겠습니다. 이 문자열은 어느 지점에서나 정확히 한 번 회전할 수 있습니다. 이 작업을 수행하여 얻을 수 있는 가장 긴 회문 부분 문자열의 길이를 찾아야 합니다. 따라서 입력이 s =elklev와 같으면 출력은 7이 됩니다. el과 klev 사이를 회전하여 levelk를 얻을 수 있기 때문입니다. 따라서 여기에서 가장 긴 회문 부분 문자열 길이는 5입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − s2 :=s를 두 번 연결 max_len :=0 범위 0에서 s − 1까지의 x