숫자 n이 있다고 가정하고 1에서 n까지 레이블이 지정된 n개의 다른 코스가 있음을 나타냅니다. 우리는 또한 관계[i]가 한 쌍(prevCourse_i, nextCourse_i)을 포함하는 관계라는 배열을 가지고 있습니다. 이는 prevCourse_i 과정과 nextCourse_i 과정 사이의 전제 관계를 나타냅니다. 따라서 prevCourse_i 과정은 nextCourse_i 과정보다 먼저 수강해야 합니다. 그리고 우리가 가지고 있는 마지막 매개변수는 k입니다. 한 학기에 수강하는 과목에 대해 이전 학기에 모든 선수 과목을 이수했
세 개의 문자 a, b, c만 있는 문자열 s가 있다고 가정합니다. 문자열에 다음 알고리즘을 여러 번 적용합니다 - 접두사의 모든 문자가 동일한 s에서 비어 있지 않은 접두사를 선택하십시오. 접미사의 모든 문자가 동일한 s에서 비어 있지 않은 접미사를 선택하십시오. 접두사와 접미사가 분리되어 있습니다. 접두사와 접미사의 문자가 같아야 합니다. s에서 접두사와 접미사를 모두 제거하십시오. 마지막으로 위의 작업을 여러 번(0번도 가능) 수행한 후 최소 길이 s를 찾아야 합니다. 따라서 입력이 s =aa
세 개의 값 b와 c가 있다고 가정합니다. 우리는 크기가 각각, b, c인 돌 더미 세 개를 가지고 솔리테어 게임을 하고 있습니다. 각 턴마다 플레이어는 비어 있지 않은 두 개의 다른 더미를 선택하고 각각에서 하나의 돌을 가져 와서 점수에 1점을 추가합니다. 비어 있지 않은 더미가 2개 미만이면 게임이 종료됩니다. 그래서 우리는 당신이 얻을 수 있는 최대 점수를 찾아야 합니다. 따라서 입력이 a =4, b =4, c =6과 같으면 초기 상태가 (4, 4, 6)이므로 출력은 7이 되고 다음 단계를 따를 수 있습니다. - 현재
두 개의 문자열 s와 t가 있다고 가정합니다. 우리는 다음과 같은 방식으로 merge라는 문자열을 형성하기를 원합니다. s 또는 t가 비어 있지 않은 동안 다음 옵션 중 하나를 선택하십시오 - s가 비어 있지 않은 경우 s의 첫 번째 문자를 추가하여 s에서 병합 및 삭제합니다. t가 비어 있지 않은 경우 t의 첫 번째 문자를 추가하여 t에서 병합하고 삭제합니다. 마지막으로 우리가 형성할 수 있는 사전순으로 가장 큰 병합을 찾아야 합니다. 따라서 입력이 s =zxyxx t =yzxxx와 같으면 출력은 zyzxyxxx
2D 평면의 좌표점을 포함하는 점이라는 배열이 있다고 가정하고 x값으로 정렬됩니다. 여기서 점[i] =(x_i, y_i)이므로 x_i
문자열 s가 있다고 가정하고 s의 동종 부분 문자열의 수를 찾아야 합니다. 답은 매우 클 수 있으므로 모듈로 10^9+7을 반환합니다. 문자열의 모든 문자가 같을 때 문자열은 동질적이라고 합니다. 따라서 입력이 s =xyyzzzxx와 같으면 동종 하위 문자열이 다음과 같이 나열되기 때문에 출력은 13이 됩니다. 1.x가 세 번 나타납니다. xx는 한 번 나타납니다. 3. y가 두 번 나타납니다. yy는 한 번 나타납니다. 5. z가 세 번 나타납니다. zz가 두 번 나타납니다. zzz는 한 번
i번째 요소가 nums[i]개의 공을 포함하는 가방을 나타내는 배열 nums가 있다고 가정합니다. mx라는 다른 값도 있습니다. 다음 작업을 최대 mx번 수행할 수 있습니다. - 공이 든 가방을 선택하고 적어도 하나의 공이 포함된 두 개의 새 가방으로 나눕니다. 여기서 페널티는 가방에 넣을 수 있는 최대 공 수입니다. 수술 후 불이익을 최소화해야 합니다. 따라서 마지막으로 작업을 수행한 후 가능한 최소 페널티를 찾아야 합니다. 따라서 입력이 nums =[4,8,16,4], mx =4와 같으면 다음 작업을 수행할 수
매우 큰 정수를 나타내는 num이라는 문자열이 있고 또 다른 값 k가 있다고 가정합니다. 최대 k 번 값의 인접한 두 자리를 바꿀 수 있습니다. 얻을 수 있는 최소값을 찾아야 합니다. 따라서 입력이 num =5432 k =4와 같으면 첫 번째 숫자가 5432이기 때문에 출력은 2453이 됩니다. 그런 다음 첫 번째 단계 후에는 4532, 4523, 4253, 마지막 단계 2453이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. min_num :=num의 자릿수 정렬 나는 :=0, to_find :=0
0이면 (i-1)번째 하위 배열이 앞에 나타날 것입니다. i번째 부분배열(숫자) 따라서 입력이 group =[[2,-2,-2],[4,-3,0]] nums =[1,-1,0,2,-2,-2,4,-와 같은 경우 3,0], 배열 group[0]이 nums의 인덱스 3에서 5까지이고 group[1]이 nums에서 인덱스 6에서 8까지이기 때문에 출력은 true가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 나는 :=0 그룹의 각 그룹에 대해 수행 범위 i의 j에 대해 숫자 크기 - 1, 수행 숫자의 하
Amal과 Bimal 두 명의 플레이어가 게임을 하고 있고 Amal이 먼저 시작한다고 가정합니다. 처음에는 더미에 n개의 서로 다른 돌이 있습니다. 각 플레이어의 차례에 그는 더미에서 0이 아닌 정사각형의 돌을 제거하는 이동을 합니다. 또한 한 플레이어가 움직일 수 없으면 게임에서 집니다. 따라서 n이 있으면 Amal이 게임에서 이길 수 있는지 여부를 확인해야 합니다. 따라서 입력이 n =21과 같으면 처음에 Amal이 16을 취하고 Bimal이 4를 취한 다음 Amal이 1을 취하여 게임에서 승리하기 때문에 출력은 True가 됩
일부 주택이 위치한 좌표점 목록을 포함하는 위치 목록이 있다고 가정합니다. 임의의 지점에서 (xc, yc)까지의 유클리드 거리의 합이 최소가 되도록 (xc, yc)에 서비스 센터를 만들고자 하는 경우. 따라서 최소 거리의 합을 구해야 합니다. 따라서 입력이 위치 =[(10,11),(11,10),(11,12),(12,11)]과 같으면 출력은 4.0이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − numIter :=50 total() 함수를 정의합니다. cx, cy, 위치가 필요합니다. 총계 :=0
소문자만 포함된 문자열 s가 있다고 가정하고 다음 규칙을 충족하는 s의 비어 있지 않은 부분 문자열의 최대 수를 찾아야 합니다. 부분 문자열이 겹치지 않습니다. 특정 문자 ch를 포함하는 부분 문자열은 ch의 모든 발생도 포함해야 합니다. 우리는 이 두 조건을 충족하는 부분 문자열의 최대 수를 찾아야 합니다. 동일한 수의 하위 문자열을 가진 솔루션이 둘 이상 있는 경우 총 길이가 최소인 솔루션을 반환합니다. 따라서 입력이 s =pqstpqqprrr과 같으면 조건을 충족하는 가능한 모든 하위 문자열이 [ pqstpq
상자라는 이진 문자열이 있다고 가정합니다. 여기서 상자[i]는 0은 i번째 상자가 비어 있음을 나타내고 1은 하나의 공이 포함되어 있음을 나타냅니다. 이제 한 번의 작업으로 상자에서 인접한 상자로 공 하나를 이동할 수 있습니다. 그렇게 하고 나면 어떤 상자에는 하나 이상의 공이 있을 수 있습니다. 크기가 n인 배열 답을 찾아야 합니다. 여기서 answer[i]는 모든 공을 i번째 상자로 이동하는 데 필요한 최소 작업 수입니다. 따라서 입력이 상자 =1101과 같으면 출력은 [4, 3, 4, 5]가 됩니다. 첫 번째 상자에 모
양수 값을 가진 target이라는 배열이 있다고 가정합니다. 이제 모두 0인 동일한 크기의 배열 이니셜을 고려하십시오. 이 작업을 수행하는 경우 초기값에서 대상 배열을 생성하는 데 필요한 최소 작업 수를 찾아야 합니다. (이니셜에서 하위 배열을 선택하고 각 값을 1씩 증가시킵니다.) 따라서 입력이 target =[2,3,4,3,2]와 같으면 초기 배열이 [0,0,0,0,0]이기 때문에 출력은 4가 됩니다. 4를 1씩 증가시켜 배열이 [1,1,1,1,1]이 되도록 한 다음 인덱스 0에서 4까지 다시 선택하여 [2,2,2,2,2]로
=m). 배열은 1-인덱싱됩니다. 이제 초기 점수는 0입니다. 정확히 m개의 작업을 수행하려고 합니다. i번째 연산(1-인덱스)에서 우리는 - 숫자의 시작 또는 끝에서 x에서 하나의 값을 선택합니다. 점수에 승수[i] * x를 추가합니다. 배열 번호에서 x를 제거합니다. m개의 연산을 수행한 후 최대 점수를 찾아야 합니다. 따라서 입력이 nums =[5,10,15], multipliers =[5,3,2]와 같으면 출력은 115가 됩니다. 왜냐하면 15를 취한 다음 5를 곱하여 5*15 =75를 얻을 수 있기
문자열 s와 다른 값 k가 있다고 가정합니다. s의 실행 길이로 인코딩된 버전의 길이가 최소가 되도록 s에서 최대 k개의 문자를 삭제할 수 있습니다. 우리가 알고 있듯이 실행 길이 인코딩은 연속적인 동일한 문자(2회 이상)를 문자와 문자 수를 표시하는 숫자의 연결로 바꾸는 문자열 압축 방법입니다. 예를 들어 문자열 xxyzzz가 있는 경우 xx를 x2로 바꾸고 zzz를 z3으로 바꿉니다. 따라서 압축된 문자열은 이제 x2yz3입니다. 따라서 이 문제에서 최대 k 값을 삭제한 후 s의 실행 길이로 인코딩된 버전의 최소 길이를 찾아야
두 개의 배열 nums1과 nums2가 있다고 가정합니다. 유효한 경로는 다음과 같이 정의됩니다 - (index-0에서) 순회할 nums1 또는 nums2를 선택합니다. 왼쪽에서 오른쪽으로 배열을 탐색합니다. 이제 nums1 및 nums2에 있는 값을 통해 이동하는 경우 다른 배열의 경로를 변경할 수 있습니다. 여기서 점수는 유효한 경로에 있는 고유한 값의 합계입니다. 가능한 모든 유효한 경로에서 얻을 수 있는 최대 점수를 찾아야 합니다. 답이 너무 크면 10^9+7 모듈로 결과를 반환합니다. 따라서 입력이 num
숫자 문자열 s가 있다고 가정합니다. 우리가 알고 있는 것처럼 멋진 부분 문자열은 s의 비어 있지 않은 부분 문자열이므로 회문을 만들기 위해 얼마든지 교환할 수 있습니다. s의 최대 길이 굉장한 부분 문자열의 길이를 찾아야 합니다. 따라서 입력이 s =4353526과 같으면 35352가 가장 긴 멋진 부분 문자열이기 때문에 출력은 5가 됩니다. 35253 회문을 만들 수 있습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=0 pos_map :=키가 0이고 해당 값이 s의 크기를 포함하는 맵 ma
값 n과 cuts라는 배열이 있다고 가정합니다. 길이가 n 단위인 나무 막대기가 있다고 가정합니다. 스틱은 0에서 n까지 레이블이 지정됩니다. 여기에서 cut[i]는 우리가 자를 수 있는 위치를 나타냅니다. 컷은 순서대로 진행해야 하지만 컷의 순서는 원하는 대로 변경할 수 있습니다. 여기서 한 컷의 비용은 절단할 막대의 크기이고 총 비용은 모든 컷의 비용 합계입니다. 우리는 삭감의 최소 총 비용을 찾아야 합니다. 따라서 입력이 n =7, cuts =[5,1,4,3]과 같으면 출력은 16이 됩니다. 왜냐하면 [3,5,1,4]와
숫자 n이 있다고 가정합니다. 따라서 부엌에 n개의 오렌지가 있다고 가정하고 우리는 다음 규칙을 유지하면서 매일 이러한 오렌지 중 일부를 먹습니다. 1. 단일 오렌지를 먹습니다. 2. n이 짝수이면 n/2개의 오렌지를 먹습니다. 3. n이 3으로 나누어 떨어지면 2*(n/3)개의 오렌지를 먹을 수 있습니다. 우리는 매일 하나의 옵션만 선택할 수 있습니다. n개의 오렌지를 먹기 위한 최소 일수를 찾아야 합니다. 따라서 입력이 n =10과 같으면 출력은 4가 됩니다. 첫째 날에는 오렌지 1개, 10 - 1 =9를 먹습니다.