0에서 n-1까지의 숫자 목록이 있다고 가정합니다. 숫자는 가능한 한 많이 반복될 수 있습니다. 추가 공간을 차지하지 않고 반복되는 숫자를 찾아야 합니다. n =7의 값이고 목록이 [5, 2, 3, 5, 1, 6, 2, 3, 4, 5]와 같은 경우. 답은 5, 2, 3입니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 목록의 각 요소 e에 대해 다음 단계를 수행하십시오. - sign :=A[e의 절대값] 부호가 양수이면 음수로 만듭니다. 그렇지 않으면 반복입니다. 예시 #include<iostream> #
이 튜토리얼에서는 주어진 바이너리 트리의 홀수 레벨에 있는 노드를 출력하는 프로그램에 대해 논의할 것입니다. 이 프로그램에서 루트 노드의 레벨은 1로 간주되고 동시에 대체 레벨은 다음 홀수 레벨입니다. 예를 들어 다음 이진 트리가 주어진다고 가정해 보겠습니다. 그러면 이 이진 트리의 홀수 레벨에 있는 노드는 1, 4, 5, 6이 됩니다. 예시 #include <bits/stdc++.h> using namespace std; struct Node { int data;
6개의 다른 숫자가 있는 목록이 있다고 가정합니다. 하나의 숫자만 다섯 번 반복됩니다. 따라서 배열에는 총 10개의 요소가 있습니다. 두 가지 비교만 사용하여 중복 숫자를 찾습니다. 목록이 [1, 2, 3, 4, 4, 4, 4, 4, 5, 6]과 같으면 출력은 4입니다. 숫자가 10개뿐이므로 모든 유형의 중복 숫자에 대해 숫자 범위가 인덱스 3에서 5까지 배치됩니다. 이 인덱스를 확인하여 결과를 찾을 수 있습니다. 예시 #include<iostream> using namespace std; int getDuplicate
n개의 요소 목록을 찾아야 한다고 생각해 보십시오. 그러나 실제 배열의 두 연속 요소에 대한 XOR 값이 있습니다. 또한 실제의 첫 번째 요소가 제공됩니다. 따라서 배열 요소가 a, b, c, d, e, f이면 주어진 배열은 a^b, b^c, c^d, d^e 및 e^f가 됩니다. 첫 번째 숫자가 주어지면 모든 숫자를 찾는 데 도움이 될 수 있습니다. 실제 배열의 두 번째 요소를 찾으려면 두 번째 요소 c =b ^ arr[1]에 대해 b =a ^ arr[i] 등을 수행해야 합니다. 예 #include<iostream> u
두 개의 배열 A와 B가 있다고 가정합니다. 요소가 거의 없습니다. 집합 A에는 있지만 집합 B에는 없는 요소를 찾아야 합니다. 그런 상황을 생각하고 A와 B를 집합으로 간주하면 기본적으로 집합 나누기 연산입니다. A와 B 사이에 설정된 차이는 해당 요소를 반환합니다. 예 #include<iostream> #include<set> #include<algorithm> #include<vector> using namespace std; void setDiffResults(int A[], int
Excel 열 번호는 알파벳순이라는 것을 알고 있습니다. A에서 시작하여 Z 다음에는 AA, AB, ZZ, 다시 AAA, AAB, ZZZ 순으로 진행됩니다. 따라서 1열은 A, 27열은 Z입니다. 여기에서 열의 개수가 주어졌을 때 열 문자를 얻는 방법을 살펴보겠습니다. 따라서 열 번호가 80이면 CB가 됩니다. 숫자 n이 있고 그 값이 28이라고 가정하면 26으로 알림을 받아야 합니다. 나머지가 0이면 숫자는 26, 52 등입니다. 그런 다음 출력 문자열에 Z를 넣습니다. n의 값은 n/26 – 1이 됩니다. 그리고 나머지가 0이
여기서 우리는 배열에서 가장 작은 요소의 빈도를 찾는 방법을 볼 것입니다. 배열 요소가 [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10]이라고 가정합니다. 여기서 가장 작은 요소는 3이고 이 요소의 빈도는 4입니다. 따라서 출력은 4입니다. . 이 문제를 해결하기 위해 목록의 가장 작은 요소를 찾은 다음 첫 번째 숫자의 발생 횟수를 세어 결과가 됩니다. 예시 #include<iostream> using namespace std; int min_element(int arr[],
배열 A가 있다고 가정합니다. 배열을 합이 같은 두 부분으로 나눌 수 있는지 확인해야 합니다. 요소가 [6, 1, 3, 2, 5]이고 [6, 1] 및 [2, 5]가 두 개의 하위 배열이 될 수 있다고 가정합니다. 이 문제는 다음 규칙을 따르면 쉽게 해결할 수 있습니다. 먼저 배열의 모든 요소의 합을 찾아야 하고, 배열의 각 요소에 대해 total_sum - 지금까지 찾은 요소의 합을 사용하여 올바른 합을 계산할 수 있습니다. 예시 #include<iostream> #include<numeric> using n
숫자 N이 있다고 가정합니다. 또 다른 숫자 k가 있습니다. k 개의 숫자를 사용하여 숫자를 나타낼 수 있는지 여부를 확인해야 합니다. 숫자가 54이고 k =3이라고 가정하면 [2, 3, 9]와 같은 숫자가 인쇄되고, 표현할 수 없으면 인쇄합니다. 이를 해결하기 위해 N의 모든 소인수를 찾아 벡터에 저장한 다음 1보다 큰 k 숫자를 찾기 위해 벡터의 크기가 k보다 큰지 확인합니다. 크기가 k보다 작으면 -1을 반환하고, 그렇지 않으면 처음 k-1 인수를 인쇄하고 마지막 인수는 나머지 모든 숫자의 곱이 됩니다. 예시 #include
요소가 거의 없는 배열 A가 있다고 가정합니다. 두 개의 다른 값 X와 k가 있습니다. 우리의 임무는 배열 A에서 X의 가장 가까운 요소의 k개를 찾는 것입니다. 요소 X가 배열에 있으면 출력에 표시되지 않습니다. A =[12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56]이고 X =35, k =4인 경우 출력은 30, 39, 42, 45입니다. . 이를 해결하기 위해 이진 검색 접근 방식을 사용합니다. 이것을 사용하여 우리는 교차점을 얻을 것입니다. 교차점의 인덱스가 발견되면 O(k) 시간
요소가 거의 없는 배열 A가 있다고 가정합니다. 배열이 정렬되지 않았습니다. 두 개의 다른 값 X와 k가 있습니다. 우리의 임무는 배열 A에서 X의 가장 가까운 요소의 k개를 찾는 것입니다. 요소 X가 배열에 있으면 출력에 표시되지 않습니다. A =[48, 50, 55, 30, 39, 35, 42, 45, 12, 16, 53, 22, 56] 및 X =35, k =4인 경우 출력은 30, 39, 42, 45입니다. . 이를 해결하기 위해 힙 데이터 구조를 사용합니다. 단계는 아래와 같습니다 - 첫 번째 k 요소와 차이의 최대
일부 요소가 있는 배열 A가 있다고 가정합니다. 배열 A에서 가장 큰 요소를 찾아야 하지만 제약 조건은 조건 연산자를 사용할 수 없다는 것입니다. 따라서 A =[12, 63, 32, 24, 78, 56, 20]이면 최대 요소는 78이 됩니다. 이 문제를 해결하기 위해 비트 AND 연산을 사용합니다. 처음에는 배열에 하나의 추가 요소 INT_MAX(모든 비트가 1인 경우)를 삽입합니다. 그런 다음 배열에서 모든 쌍의 최대 AND 값을 찾으려고 합니다. 이렇게 얻은 최대값에는 INT_MAX의 AND 값과 원래 배열의 가장 큰 요소가
사전과 문자열 s가 있다고 가정합니다. 문자열 s의 일부 문자를 삭제하여 구성할 수 있는 사전에서 가장 긴 문자열을 찾습니다. s가 apbreoigroakml이고 사전에 {prog, ram, program}이 있다고 가정하면 결과는 program이 됩니다. 이를 해결하기 위해 우리는 모든 사전 단어를 탐색하고 각 단어에 대해 주어진 문자열의 하위 시퀀스가 그러한 모든 단어 중 가장 긴지 확인합니다. 마지막으로 주어진 문자열을 하위 시퀀스로 사용하여 가장 긴 단어를 반환합니다. 예시 #include<iostream>
1에서 n까지의 정수를 포함하는 하나의 원형 배열이 있다고 가정합니다. 첫 번째 요소부터 시작하여 모든 두 번째 요소를 삭제한 후 목록에 남아 있는 마지막 요소를 찾습니다. 입력이 5이면 배열은 [1, 2, 3, 4, 5]가 됩니다. 1부터 시작합니다. 각 두 번째 요소를 삭제한 후 다음과 같이 됩니다. - 1 0 3 4 5 1 0 3 0 5 0 0 3 0 5 0 0 3 0 0 따라서 목록에 남아 있는 요소는 3입니다. 우리는 재귀를 사용하여 이 문제를 해결할 것입니다. n이 짝수라고 가정합니다. 숫자 2, 4, 6은 제거되고
문자열 str이 있다고 가정합니다. 다른 캐릭터 ch가 있습니다. 우리의 임무는 문자열에서 ch의 마지막 인덱스를 찾는 것입니다. 문자열이 Hello이고 문자 ch =l이라고 가정하면 마지막 인덱스는 3이 됩니다. 이를 해결하기 위해 목록을 오른쪽에서 왼쪽으로 순회하고 문자가 l과 같지 않으면 인덱스를 줄이고 일치하면 중지하고 결과를 반환합니다. 예 #include<iostream> using namespace std; int getLastIndex(string& str, char ch) { &nbs
행렬이 있다고 가정하고 우리의 임무는 해당 행렬의 각 열의 최대 요소를 찾아 인쇄하는 것입니다. 이 작업은 간단합니다. 각 열에 대해 최대값을 재설정하고 최대값 요소를 찾아 인쇄합니다. 더 나은 이해를 위해 코드를 살펴보겠습니다. 예시 #include<iostream> #define MAX 10 using namespace std; void largestInEachCol(int mat[][MAX], int rows, int cols) { for (int i = 0; i < cols; i++)
행렬이 있다고 가정하고 우리의 임무는 해당 행렬의 각 행의 최대 요소를 찾아 인쇄하는 것입니다. 이 작업은 간단합니다. 각 행에 대해 최대값을 재설정하고 최대값 요소를 찾아 인쇄합니다. 더 나은 이해를 위해 코드를 살펴보겠습니다. 예시 #include<iostream> #define MAX 10 using namespace std; void largestInEachRow(int mat[][MAX], int rows, int cols) { for (int i = 0; i < rows; i++)
숫자 목록이 있다고 가정해 보겠습니다. 우리의 작업은 재귀를 사용하여 연결 목록의 중간을 찾는 것입니다. 따라서 목록 요소가 [12, 14, 18, 36, 96, 25, 62]이면 중간 요소는 36입니다. 이 문제를 해결하기 위해 목록의 총 노드 수를 재귀적으로 계산하고 이의 절반을 수행합니다. 그런 다음 각 호출에서 n만큼 감소하는 재귀를 통해 롤백하고 n이 0인 요소를 반환합니다. 예시 #include<iostream> #include<stack> using namespace std; class Node{
여기서 숫자가 주어지면 설정되어 있는 Most Significant Bit 값을 찾는 방법을 알아보겠습니다. 값은 2의 거듭제곱입니다. 따라서 숫자가 10이면 MSB 값은 8이 됩니다. MSB의 위치를 찾은 다음 k번째 위치에서 set-bit로 숫자의 값을 찾아야 합니다. 예시 #include<iostream> #include<cmath> using namespace std; int msbBitValue(int n) { int k = (int)(log2(n)); &nbs
두 개의 숫자 N과 D가 있다고 가정합니다. D로 나눌 수 있는 N 자리 숫자를 찾아야 합니다. N이 3이고 D가 5이면 숫자는 500이 될 수 있습니다. 이것은 쉽게 풀 수 있습니다. D가 10이고 N이 1이면 불가능합니다. D를 넣고 D에 m개의 자릿수가 있다고 가정하고 N – m개의 0을 연결하여 N개의 자릿수를 D로 나눌 수 있도록 합니다. 예시 #include<iostream> using namespace std; string nDigitDivByD(int n, int d) { string