여기서 우리는 한 가지 흥미로운 문제를 볼 것입니다. 여기서 x와 y는 범위 내에 있으므로 l <=x, y <=r, 쌍은 하나의 속성을 가지며 x 값은 y를 나눕니다. . 사용 가능한 쌍이 여러 개인 경우 하나만 선택하십시오. 하한 l과 2l의 값을 얻으면 O(1) 시간에 이 문제를 해결할 수 있습니다. 우리는 y/x의 가장 작은 값이 2일 수 있다는 것을 알고 있으며, 범위에 더 큰 값이 있으면 2가 범위에 포함됩니다. 그리고 x를 늘리면 2배도 증가하므로 l과 2l은 주어진 범위에 속하는 최소 쌍이 됩니다. 예시 #includ
여기서 우리는 주어진 배열에서 고정 소수점을 찾는 방법을 볼 것입니다. 배열에서 값이 인덱스와 같으면 하나의 요소가 고정 소수점으로 표시됩니다. 이 프로그램은 값이 있으면 값을 반환하고 그렇지 않으면 -1을 반환합니다. 배열에는 음수도 포함될 수 있습니다. 그리고 데이터 요소가 정렬됩니다. 여기서는 O(log n) 시간에 이 문제를 해결하기 위해 이진 검색 접근 방식을 사용합니다. 처음에는 중간 요소가 고정 소수점인지 여부를 확인하고, 그렇다면 반환하고, 그렇지 않으면 중간 요소의 인덱스가 인덱스의 값보다 크면 인덱스가 크면 두
여기서 우리는 주어진 배열에서 고정 소수점을 찾는 방법을 볼 것입니다. 배열에서 값이 인덱스와 같으면 하나의 요소가 고정 소수점으로 표시됩니다. 이 프로그램은 값이 있으면 값을 반환하고 그렇지 않으면 -1을 반환합니다. 배열에는 음수도 포함될 수 있습니다. 그리고 데이터 요소가 정렬됩니다. 여기에서 배열에 중복 요소가 허용됩니다. 여기서는 O(log n) 시간에 이 문제를 해결하기 위해 이진 검색 접근 방식을 사용합니다. 그러나 약간의 수정이 필요합니다. 일반 이진 검색을 사용하면 중복 요소에 대해 실패할 수 있습니다. 왼쪽을 확
여기서 우리는 하나의 문제를 보게 될 것입니다. 여기서 우리는 숫자 n을 취하고, x + x의 자릿수 합이 주어진 숫자 n과 같도록 하는 다른 값 x를 찾아야 합니다. n의 값이 21이라고 가정합니다. 이 프로그램은 15 + 15의 자릿수 합, 즉 15 + 1 + 5 =21 =n으로 숫자 x =15를 반환합니다. 이 문제를 해결하려면 간단한 접근 방식을 따라야 합니다. 우리는 1에서 n까지 반복할 것입니다. 각 반복에서 숫자의 합과 숫자의 합이 숫자와 같은지 확인한 다음 중지하고 그렇지 않으면 계속합니다. 예 #include<
요소 수가 다른 두 개의 배열이 있다고 가정합니다. x는 첫 번째 배열에 있고 y는 두 번째 배열에 있는 한 쌍의 요소(x, y)를 찾아야 합니다. 이 두 배열 사이의 요소를 교환한 후 이 두 배열의 합이 같도록 쌍이 선택됩니다. 첫 번째 배열 A가 [4, 1, 2, 2, 1, 1]이고 B가 [3, 3, 6, 3]이라고 가정하면 이제 A의 합은 11이고 B의 합은 15입니다. (1, 3)과 같은 쌍, 이 두 배열 사이에서 이 값을 교환하면 합계는 [4, 3, 2, 2, 1, 1] =13, [1, 3, 6, 3]이 됩니다. =13,
배열 A가 있다고 가정하고 n개의 다른 요소가 있습니다. x와 y의 곱이 최대가 되도록 배열 A에서 쌍(x, y)을 찾아야 합니다. 배열에는 양수 또는 음수 요소가 포함될 수 있습니다. 배열이 A =[-1, -4, -3, 0, 2, -5]와 같다고 가정하면 곱이 최대이므로 쌍은 (-4, -5)가 됩니다. 이 문제를 해결하려면 positive_max, positive_second_max, negative_max, negative_second_max의 네 가지 숫자를 추적해야 합니다. 마지막에 (positive_max * positi
배열 A가 있다고 가정하고 n개의 다른 요소가 있습니다. x와 y의 차이가 주어진 차이 d와 같도록 배열 A에서 쌍(x, y)을 찾아야 합니다. 요소 목록이 A =[10, 15, 26, 30, 40, 70]이고 주어진 차이가 30이라고 가정하면 쌍은 (10, 40) 및 (30, 70) 이 문제를 해결하기 위해 배열이 정렬되어 있다고 가정한 다음 왼쪽에서 시작하여 요소를 가리키는 두 개의 포인터를 가져옵니다. 처음에는 첫 번째 i가 첫 번째 요소를 가리키고 두 번째 j는 다음을 가리킵니다. 두 번째 요소. A[j] – A[i]가 n
K 차원 공간에 n개의 서로 다른 점이 있고 n의 값은 범위(2, 105)에 있고 k 값은 범위(1~5)에 있다고 가정합니다. 결과 지점에서 n 지점까지의 맨해튼 거리의 합이 최소화되도록 지점을 결정해야 합니다. 두 점 P1(x1, y1)과 P2(x2, y2) 사이의 맨해튼 거리는 |x1 – x2| + |y1 – y2|. 차원이 3이고 (1, 1, 1), (2, 2, 2), (3, 3, 3)과 같은 세 개의 점이 있다고 가정하면 출력은 (2, 2, 2)가 됩니다. 이 문제를 해결하려면 모든 K 차원의 점을 정렬하고 각 k 차원의
여기에 몇 가지 요소가 있는 배열 A가 있습니다. 우리의 임무는 기하 평균이 최대인 부분 집합을 찾는 것입니다. A =[1, 5, 7, 2, 0]이라고 가정하면 기하 평균이 가장 큰 부분 집합은 [5, 7]이 됩니다. 이 문제를 해결하기 위해 가장 큰 두 요소가 가장 큰 기하 평균을 형성하므로 가장 큰 두 요소가 하위 집합으로 반환된다는 것을 알기 때문에 평균을 찾지 못하는 한 가지 트릭을 따르겠습니다. 예시 #include <iostream> using namespace std; void largestGeoMeanSu
여기에서 N차의 대칭 행렬 하나를 생성하는 방법을 살펴보고 각 행의 요소에는 0에서 N – 1 사이의 숫자가 포함됩니다. 대각선 요소는 항상 0입니다. 이 작업은 쉽습니다. N x N의 행렬을 형성한 다음 각 행 i와 각 열 j에 대해 i와 j가 같으면 0으로 표시하고 그렇지 않으면 하나의 카운터를 1에서 N – 1로 늘립니다. 각 개별 행에 대한 값을 배치합니다. 예 #include <iostream> using namespace std; void makeSymmetricMatrix(int n) { &nb
이진 트리가 있다고 가정합니다. 트리에 중복된 하위 트리가 있는지 여부를 찾아야 합니다. 아래와 같은 이진 트리가 있다고 가정합니다. - 크기가 2인 두 개의 동일한 하위 트리가 있습니다. 각 하위 트리에서 D, BD 및 BE 모두 중복 하위 트리입니다. 트리 직렬화 및 해싱 프로세스를 사용하여 이 문제를 해결할 수 있습니다. 해시 테이블에 하위 트리의 순회를 저장합니다. 빈 노드에 대해 여는 괄호와 닫는 괄호를 삽입합니다. 예시 #include <iostream> #include <unordered_set&g
여기에서 n보다 작거나 같은 모든 계승 수를 인쇄하는 방법을 볼 것입니다. 숫자 N은 양수의 계승이면 계승 수라고 합니다. 따라서 일부 계승 수는 1, 2, 6, 24, 120입니다. 계승 수를 인쇄하기 위해 계승을 직접 찾을 필요는 없습니다. i =1에서 시작하여 factorial*i를 인쇄합니다. 처음에는 계승이 1입니다. 이해를 돕기 위해 코드를 살펴보겠습니다. 예시 #include <iostream> using namespace std; void getFactorialNumbers(int n) { &
배열 A가 있다고 가정하고 해당 배열에서 a%b =k가 되도록 모든 쌍(a, b)을 가져와야 합니다. 배열이 A =[2, 3, 4, 5, 7]이고 k =3이라고 가정하면 쌍은 (7, 4), (3, 4), (3, 5), (3, 7)입니다. 이를 해결하기 위해 목록을 순회하여 주어진 조건이 만족하는지 여부를 확인합니다. 예시 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) { bool pairAvi
배열 A가 있다고 가정하고 해당 배열에서 ab =cd가 되도록 두 쌍 (a, b) 및 (c, d)를 선택해야 합니다. 배열 A =[3, 4, 7, 1, 2, 9, 8]이라고 합시다. 출력 쌍은 (4, 2) 및 (1, 8)입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i :=0 ~ n-1에 대해 j :=i + 1 ~ n-1, do 제품 가져오기 =arr[i] * arr[j] 해시 테이블에 제품이 없으면 Hash[product] :=(i, j) 해시 테이블에 제품이 있으면 이전 및 현재 요소를 인쇄합니다. 예
크기가 X인 용기가 있다고 가정합니다. 물과 다른 액체의 혼합물이 있고 혼합물에는 W%의 물이 있습니다. Y%에 대한 물의 비율을 증가시키기 위해 얼마나 많은 물을 추가해야 하는지 찾아야 합니다. X =125, W =20 및 Y =25인 경우 출력은 8.33리터가 됩니다. 이전 혼합물에 A량의 물을 추가해야 하므로 새로운 양은 X + A가 된다고 가정합니다. 따라서 혼합물에 있는 물의 양은 이 공식을 따릅니다. 이전 금액+A=((X의 W%) + A) 또한 혼합물에 있는 물의 양 =새 혼합물에 있는 물의 새 백분율. 따라서 이것은
대각선 요소가 처음에 비어 있는 하나의 3x3 행렬이 있다고 가정합니다. 행, 열, 대각선의 합이 같도록 대각선을 채워야 합니다. 행렬이 −와 같다고 가정합니다. 채우고 나면 - 대각선 요소가 x, y, z라고 가정합니다. 값은 - x =(M[2, 3] + M[3, 2])/ 2 z =(M[1, 2] + M[2, 1])/ 2 y =(x + z)/2 예 #include<iostream> using namespace std; void displayMatrix(int matrix[3][3]) { &nb
여기서 우리는 하나의 문제를 보게 될 것입니다. 여기서 우리는 숫자 n을 취하고, x + x의 자릿수 합이 주어진 숫자 n과 같도록 하는 다른 값 x를 찾아야 합니다. n의 값이 21이라고 가정합니다. 이 프로그램은 15 + 15의 자릿수 합, 즉 15 + 1 + 5 =21 =n으로 숫자 x =15를 반환합니다. 이 문제를 해결하려면 간단한 접근 방식을 따라야 합니다. 우리는 1에서 n까지 반복할 것입니다. 각 반복에서 숫자의 합과 숫자의 합이 숫자와 같은지 확인한 다음 중지하고 그렇지 않으면 계속합니다. 예시 #include&l
요소가 거의 없는 배열 A가 있다고 가정합니다. 모든 요소를 A로 나눌 수 있도록 A에서 요소를 찾아야 합니다. A가 [15, 21, 69, 33, 3, 72, 81]과 같다고 가정하면 모든 숫자는 3으로 나눌 수 있으므로 요소는 3이 됩니다. 이 문제를 해결하기 위해 우리는 A에서 가장 작은 숫자를 취하여 모든 숫자를 가장 작은 숫자로 나눌 수 있는지 여부를 확인하고, 그렇다면 숫자를 반환하고, 그렇지 않으면 false를 반환합니다. 예시 #include<iostream> #include<algorithm&g
배열 A가 있고 n개의 요소가 있다고 가정합니다. 우리의 임무는 배열 A를 두 개의 하위 배열로 나누어 각 하위 배열의 합이 같도록 하는 것입니다. 배열 A =[2, 3, 4, 1, 4, 5]라고 가정하고 출력은 1이므로 1 이전과 1 이후의 하위 배열이 사용됩니다. [2, 3, 4] 및 [4, 5]. 이 문제를 해결하기 위해 right_sum의 첫 번째 요소를 제외한 전체 배열을 계산합니다. 그것이 파티션 요소라고 생각하십시오. 우리는 왼쪽에서 오른쪽으로 횡단할 것입니다. right_sum에서 요소를 빼고 left_sum에 요소
여기서 우리는 대괄호 문자열에서 동일한 점을 얻는 방법을 볼 것입니다. 등점은 인덱스 I로 앞의 여는 괄호의 수가 뒤의 닫는 괄호의 수와 같도록 합니다. 대괄호 문자열이 (()))(()()()))와 같다고 가정하고 자세히 보면 따라서 0에서 9까지의 여는 괄호의 개수는 5이고, 9에서 14까지의 닫는 괄호의 개수도 5이므로 이것이 등점입니다. 이 문제를 해결하려면 다음 몇 단계를 따라야 합니다 - 모든 인덱스 i까지 문자열에 나타나는 여는 괄호의 수를 저장합니다. 문자열에 나타나는 닫는 괄호의 수를 각 인덱스 I까지 저장하