이 문제에서는 크기가 N인 배열 arr[]과 두 가지 유형이 가능한 Q 쿼리가 제공됩니다. 우리의 임무는 주어진 인덱스를 업데이트하고 범위에서 GCD를 찾는 쿼리를 해결하는 프로그램을 만드는 것입니다. 쿼리는 - 유형 1 − {1, index, value} - 주어진 인덱스의 요소를 값만큼 증가시킵니다. 유형 2 − {2, L, R} - 인덱스 범위 [L, R]에 있는 요소의 GCD를 찾습니다. 문제 설명 − [L, R] 범위에 있는 요소의 GCD를 찾아 값을 반환해야 합니다. 문제를 이해하기 위해 예를 들어보겠습니다.
이 문제에서는 N개의 정점 트리와 각각 두 개의 값 i와 j로 구성된 Q 쿼리가 제공됩니다. 우리의 임무는 트리에서 조상-후손 관계에 대한 쿼리를 해결하는 프로그램을 만드는 것입니다. 각 쿼리를 해결하려면 노드 i가 트리에서 노드 j의 조상인지 확인해야 합니다. 문제를 이해하기 위해 예를 들어보겠습니다. 입력 Q = 2, query[][] = {{3, 5}, {1, 6}} 출력 No Yes 설명 i = 3, j = 5: The node 3 is not the ancestor of node 5. Return NO. i = 1
nums라는 숫자 목록이 있다고 가정하고 i
목록의 목록이 있다고 가정하고 각 목록에서 하나의 값을 선택하고 선택한 요소의 최대값과 최소값 사이의 차이를 취하여 형성할 수 있는 가장 작은 차이를 찾아야 합니다. 따라서 입력이 목록 =[ [30, 50, 90], [85], [35, 70]]과 같으면 출력은 20이 됩니다. 90, 85, 70 및 90 - 70 =20 이 문제를 해결하기 위해 다음 단계를 따릅니다. − maxVal :=-inf ret :=inf 우선순위 큐 pq 정의 n :=목록 크기 initialize i :=0의 경우, i
nums라는 숫자 목록과 다른 값 k가 있다고 가정합니다. 목록을 k개의 비어 있지 않은 하위 목록으로 분할할 수 있습니다. k 하위 목록의 최소 최대 합을 찾아야 합니다. 따라서 입력이 nums =[2, 4, 3, 5, 12] k =2와 같으면 [2, 4, 3, 5] 및 [ 12]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ok() 함수를 정의하면 배열 v, k, x,가 사용됩니다. cnt :=0, 합계 :=0 v −의 각 요소 i에 대해 x이면 - 합계 :=나는 (cnt를 1씩 증가
소문자 문자열 s가 있다고 가정하고 가능한 한 적은 문자열로 분할하여 각 문자열이 회문(palindrome)이 되도록 한 다음 문자열의 수를 찾아야 합니다. 따라서 입력이 s =levelracecar와 같으면 두 개의 회문 level과 racecar가 있으므로 출력은 2가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=A의 크기 크기(n + 1)의 배열 결과 정의 결과[n] :=-1 =0일 때 업데이트(i를 1만큼 감소), − 결과[i] :=n - i - 1 초기화 j :=i의
2차원 행렬이 있다고 가정하고 모든 요소가 동일한 값을 포함하는 가장 큰 k × k 부분행렬을 찾은 다음 k 값을 찾아야 합니다. 따라서 입력이 다음과 같으면 1 1 8 3 1 5 5 5 2 5 5 5 4 5 5 5 값이 5인 3 × 3 정방 행렬이 있으므로 출력은 3이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=행렬의 행 수 m :=행렬의 열 개수 크기(n x m)의 하나의 2D 배열 dp를 정의하고 1로 채웁니다. 렛 :=1 =0일 때 업데이트(i를 1만큼 감소)
문자열의 중단점을 나타내는 고유하고 정렬된 숫자 목록이 있다고 가정합니다. 우리는 이러한 규칙에서 트리를 만들고 싶습니다 - 값이 (a, b)인 노드가 있으며 여기서 b와 b는 중단점입니다. 이는 노드가 문자열의 인덱스 [a, b]에 걸쳐 있음을 의미합니다. 루트 노드는 모든 중단점에 걸쳐 있습니다. (전체 문자열). 노드의 왼쪽 및 오른쪽 자식 범위는 순서가 지정되고 연속적이며 부모 노드의 범위를 포함합니다. 리프 노드의 중단점에서 a의 인덱스는 중단점에서 b의 인덱스보다 먼저 1입니다. 트리의 비용은
요소가 지형의 높이를 나타내는 2D 행렬이 있다고 가정합니다. 비가 와서 계곡의 모든 공간이 채워지는 상황을 상상해 봅시다. 계곡 사이에 끼게 될 비의 양을 알아내야 합니다. 따라서 입력이 다음과 같으면 6 6 6 8 6 4 5 8 6 6 6 6 그러면 4에서 5칸 사이에 3단위의 물을 담을 수 있으므로 출력은 3이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − x 및 y 좌표와 높이 h를 포함하는 구조 데이터 정의 우선 순위 대기열 pq를 정의하고 높이 값에 따라 정렬된 데이터 항목을 저장
문자열 s와 다른 값 k가 있다고 가정합니다. k개의 고유한 하위 시퀀스를 얻을 수 있도록 s의 일부 하위 시퀀스를 선택해야 합니다. 여기서 부분 시퀀스를 선택하는 비용은 (s)의 길이 - (부분 시퀀스)의 길이와 같습니다. 따라서 k개의 고유한 하위 시퀀스를 선택한 후 가능한 가장 낮은 총 비용을 찾아야 합니다. 이 집합을 찾을 수 없으면 -1을 반환합니다. 빈 문자열을 유효한 하위 시퀀스로 간주합니다. 따라서 입력이 s =pqrs, k =4와 같으면 출력은 3이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. −
각 요소가 유클리드 좌표를 나타내는 [x, y] 형식인 좌표 목록이 있다고 가정합니다. 가장 작은 제곱 거리(x1 - x2 ) 2 + (y1 - y2 ) 2 제공된 두 좌표 사이. 따라서 입력이 좌표 ={{1, 2},{1, 4},{3, 5}}와 같으면 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 하나의 지도 정의 ytorightmostx 배열 좌표 정렬 ret :=무한대 좌표의 각 p에 대해 - it =(p[1] - sqrt(ret))가 ytorightmostx에 있거나 y
nums라는 숫자 목록이 있다고 가정하고 주어진 목록의 모든 홀수 길이 하위 목록의 중앙값 합계를 찾아야 합니다. 따라서 입력이 nums =[2, 4, 6, 3]과 같으면 홀수 길이의 하위 목록이 − [2], [4], [6], [3]이므로 출력은 23이 됩니다. [2, 4, 6], [4, 6, 3]이므로 중앙값의 합은 2 + 4 + 6 + 3 + 4 + 4 =23입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ret :=0 initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼
행이라는 숫자 목록이 있고 이것이 행에 누워 있는 양말을 나타낸다고 가정합니다. 그것들은 정렬되어 있지 않지만 (0, 1), (2, 3), (4, 5) 등과 같이 각 양말 쌍이 나란히 있도록 재배열하고 싶습니다. 재정렬에 필요한 최소 스왑 수를 찾아야 합니다. 따라서 입력이 행 =[0, 5, 6, 2, 1, 3, 7, 4]와 같으면 행 순서가이므로 출력은 2가 됩니다. [0, 5, 6, 2, 1, 3, 7, 4] [0, 1, 6, 2, 5, 3, 7, 4] [0, 1, 3, 2, 5, 6, 7, 4] [0,
[u, v] 형식의 트리 가장자리 목록이 있다고 가정합니다. 이는 u와 v 사이에 무방향 가장자리가 있음을 나타냅니다. 그리고 x와 y 값도 두 개 있습니다. 우리가 노드 x에 있고 상대가 노드 y에 있는 경우. 첫 번째 라운드에서는 우리가 이동하고 다음 라운드에서는 상대방이 이동하는 식으로 진행됩니다. 상대방은 라운드에서 움직이지 않도록 선택할 수 있습니다. 상대를 잡는 데 필요한 최소 라운드 수를 찾아야 합니다. 따라서 입력이 edge =[[0, 1], [0, 2], [1, 3], [1, 4]], x =0, y =3과 같으면
다음 값이 있는 2D 행렬이 있다고 가정합니다. 0은 빈 셀을 나타냅니다. 1은 벽을 나타냅니다. 2는 사람을 나타냅니다. 이제 사람은 위, 아래, 왼쪽, 오른쪽의 네 방향 중 하나를 걸을 수 있습니다. 그렇지 않으면 한 시간 단위에 머물 수 있습니다. 우리는 모든 사람이 만나고 시간을 반환하는 데 걸리는 시간을 최소화할 수 있는 걸을 수 있는 감방을 찾아야 합니다. 우리는 두 사람이 같은 빈 셀을 통과할 수 있다는 점을 명심해야 하며 두 사람 사이에는 항상 어떤 길이 있다고 가정할 수 있습니다. 따라서 입력이 다음과 같으면 2
이진 트리가 있다고 가정하고 트리의 상위 뷰를 찾아야 하며 왼쪽에서 오른쪽으로 정렬됩니다. 따라서 입력이 이미지와 같으면 출력은 [3, 5, 8, 6, 9]가 됩니다. 3은 2보다 크고 5는 7보다 높으므로 보이지 않습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 보기 :=새로운 빈 지도 q :=이중 종료 큐 q의 끝에 쌍(루트, 0) 삽입 시작 :=inf, 끝 :=-inf q가 비어 있지 않은 동안 수행 (노드, 좌표) :=q의 왼쪽 요소, q의 왼쪽 요소 제거 시작 :=시작
Domino와 Tromino의 두 가지 모양이 있다고 가정합니다. 도미노는 2 x 1 모양이고 트로미노는 L자 모양입니다. 아래와 같이 회전할 수 있습니다 - 숫자 n이 있는 경우 이 두 가지 유형의 조각으로 2 x n 보드를 채우는 구성의 수를 찾아야 합니다. 타일링에서 알 수 있듯이 모든 사각형은 타일로 덮여 있어야 합니다. 따라서 입력이 3이면 출력은 5가 됩니다. 따라서 배열은 [XYZ XXZ XYY XXY XYY] 및 [XYZ YYZ XZZ XYY XXY]가 될 수 있습니다. 여기에서 다른 문자는 다른 타일에 사용됩
두 개의 소문자 문자열 s와 t가 있다고 가정하면 t와 동일한 s의 부분 시퀀스 수를 찾아야 합니다. 답이 매우 크면 10^9 + 7로 결과를 반환합니다. 따라서 입력이 s =abbd t =bd와 같으면 두 개의 가능한 하위 시퀀스 bd가 있으므로 출력은 2가 됩니다. s[1] s[3] 연결 s[2] s[3]을 연결합니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=10^9 + 7 t의 크기가 0과 같으면 - 0 반환 t가 s와 같으면 - 1 반환 s의 크기인
문자열 s가 있다고 가정하고 s의 비어 있지 않은 고유 하위 시퀀스의 수를 찾아야 합니다. 답이 매우 크면 결과를 10^9 + 7로 수정합니다. 따라서 입력이 s =xxy와 같으면 x, xx, xy, y 및 xxy라는 5개의 하위 시퀀스가 있으므로 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=10^9 + 7 n :=s의 크기 크기가 26인 배열 테이블 정의 해상도 :=0 for initialize i :=1, i <=n일 때 업데이트(i를 1만큼 증가), do−
성능과 비용이라는 길이가 같은 두 개의 숫자 목록이 있다고 가정합니다. 그리고 또 다른 숫자 k가 있습니다. 이는 각 작업자 i가 성능[i] 수준에서 수행하고 비용이 최소한 비용[i]임을 나타냅니다. 직원들이 그룹의 다른 직원에 비해 성과에 비례하여 급여를 받을 것이라는 점을 감안할 때 k 직원을 고용하기 위한 최소 비용을 찾아야 합니다. 따라서 입력이 performance =[5, 3, 2] 비용 =[100, 5, 4] k =2와 같으면 emp1과 emp2를 선택할 수 있으므로 출력은 10이 됩니다. 그들은 최소한 5 + 4 =