이 문제에서는 배열과 합계가 제공됩니다. 우리의 임무는 C++에서 주어진 합보다 작거나 같은 합을 갖는 최대 합 하위 배열을 찾는 프로그램을 만드는 것입니다. 합이 주어진 합보다 작거나 같은 n보다 작거나 같은 길이의 부분배열을 찾아야 합니다. 문제를 이해하기 위해 예를 들어 보겠습니다. 입력 - 배열 ={3, 5, 1, 8, 2, 9}, 합계 =25 출력 − 25 설명 − 합계가 25보다 작거나 같은 하위 배열은 {5, 1, 8, 2, 9}입니다. 최대 합계 하위 배열을 찾는 한 가지 간단한 방법은 배열을 반복하고 모든
이 문제에서는 배열이 제공됩니다. 우리의 임무는 C++에서 최대 하나의 요소를 제거하는 최대 합 하위 배열을 찾는 프로그램을 만드는 것입니다. 기본적으로 제거될 때 배열에 남아 있는 요소의 최대 합계를 제공하는 하나의 요소를 찾아야 합니다. 문제를 이해하기 위해 예를 들어보겠습니다. 입력 - 배열 ={5, 1, 9, 2, -1, 7} 출력 − 24 설명 − 배열에서 -1을 제거하고 합계가 가능한 모든 결과의 최대값이 되었습니다. 이 문제에 대한 한 가지 해결책은 배열의 최소 요소를 찾은 다음 배열의 나머지 모든 요소의 합
고유한 정수 모음이 있다고 가정합니다. 가능한 모든 순열을 찾아야 합니다. 이제 배열에 중복 요소가 저장되어 있으면 비슷하게 보이는 상태를 무시하십시오. 따라서 배열이 [1,1,3]과 같으면 결과는 [[1,1,3], [1,3,1], [3,1,1]] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 재귀적 접근 방식을 사용하여 목록, 색인을 만듭니다. 색인은 처음에 0입니다. 인덱스 =목록의 크기인 경우 res 배열에 목록을 삽입하고 반환 주어진 목록의 길이에 대한 범위 인덱스의 i에 대해 – 1 list[i] =list[ind
행렬이 있고 행렬 요소를 나선형으로 인쇄해야 한다고 가정합니다. 처음에는 첫 번째 행에서 시작하여 전체 내용을 인쇄한 다음 마지막 열을 따라 인쇄한 다음 마지막 행을 따라 인쇄하는 방식으로 요소를 나선형으로 인쇄합니다. 따라서 행렬이 다음과 같은 경우 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 출력은 [1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16] 이 문제를 해결하기 위해 다음 단계를 따릅니다. currRow :=0 및 currC
연결 목록과 값 x가 있다고 가정합니다. 파티션을 만들어야 합니다. x보다 작거나 같은 모든 노드가 x보다 크거나 같은 노드 앞에 오도록 분할합니다. 이 두 파티션 각각에서 노드의 원래 상대 순서를 유지해야 합니다. 따라서 목록이 [1,4,3,2,5,2]이고 x =3이면 출력은 [1,2,2,4,3,5]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. 더미 노드 d1과 d2를 만들고 -1로 초기화하고 두 개의 포인터 dp1과 dp2를 생성합니다. 두 포인터는 각각 d1과 d2를 가리키고 있습니다. null이 아닌 동안
그레이 코드는 두 개의 연속 값이 한 비트만 다른 이진수 시스템이라는 것을 알고 있습니다. 코드의 총 비트 수를 나타내는 음이 아닌 정수 n이 있다고 가정합니다. 그레이 코드 시퀀스를 인쇄해야 합니다. 그레이 코드 시퀀스는 0으로 시작해야 합니다. 따라서 입력이 2이면 결과는 [0,1,3,2]가 됩니다. 이는 0의 회색은 00, 1의 회색은 01, 2의 회색은 11이고 3의 회색은 10입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 배열 하나 만들기 각 숫자에 대한 회색 코드를 찾아 배열로 추가합니다. 회색으로 변환하
바이너리 트리가 있다고 가정합니다. 레벨 순서 순회 방식을 사용하여 이 트리를 순회해야 합니다. 트리가 다음과 같다면 순회 시퀀스는 다음과 같습니다. - [10, 5, 16, 8, 15, 20, 23] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 노드를 저장할 대기열 대기열 정의 루트를 쿼리에 삽입합니다. que가 비어 있지 않은 동안 do item :=대기열의 맨 앞에 있는 항목 항목 값 인쇄 항목의 왼쪽이 null이 아니면 왼쪽 항목을 que에 삽입 항목의 오른쪽이 null이 아니면 항목의 오른쪽을 que에 삽입
삼각형이 있다고 가정합니다. 위에서 아래로의 최소 경로 합을 찾아야 합니다. 각 단계에서 아래 행의 인접한 번호로 이동할 수 있습니다. 예를 들어 다음 삼각형이 다음과 같은 경우 [ [2], [3,4], [6,5,7], [4,1,8,3] ] 위에서 아래로의 최소 경로 합은 11(2 + 3 + 5 + 1 =11)입니다. 단계를 살펴보겠습니다. 동적 프로그래밍 접근 방식에서 사용할 하나의 테이블을 만듭니다. n :=삼각형의 크기 i:=n
입력 문자열이 하나 있다고 가정하고 해당 문자열의 분할은 회문 분할이며 분할 영역의 모든 하위 문자열이 회문입니다. 이 섹션에서 우리는 주어진 문자열을 회문 분할에 필요한 최소 컷을 찾아야 합니다. 따라서 문자열이 ababbbabbababa와 같은 경우 회문으로 파티션을 최소로 잘라냅니다. 여기서 3컷이 필요합니다. 회문은 다음과 같습니다. 밥밥 | ㄴ | 아바바 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=str의 길이 n x n차의 절단 행렬과 pal 행렬을 정의합니다. i :=0에서 n에 대해 pal[i,
원이 있고 그 원 위에 n개의 주유소가 있다고 가정합니다. 다음과 같은 두 가지 데이터 세트가 있습니다. 모든 주유소의 주유량 한 주유소에서 다른 주유소까지의 거리 자동차가 원을 완성할 수 있는 첫 번째 점을 계산합니다. 1단위의 휘발유로 자동차는 1단위의 거리를 갈 수 있습니다. 4개의 주유소가 있고 주유소의 양과 다음 주유소까지의 거리는 [(4, 6), (6, 5), (7, 3), (4, 5)]와 같으며, 자동차가 순환할 수 있는 첫 번째 지점은 두 번째 주유소입니다. 출력 시작 =1(두 번째 주유소 인덱스) 이 문제는
Reverse Polish 표기법이 있고 값을 평가해야 한다고 가정합니다. 역 폴란드어 표기법은 후위 표현이라고도 합니다. 여기서 우리는 접미사 표현식을 풀기 위해 스택 데이터 구조를 사용해야 합니다. 접미사 식에서 일부 피연산자가 발견되면 스택에 푸시합니다. 어떤 연산자가 발견되면 스택에서 두 개의 항목을 팝한 다음 올바른 순서로 작업을 수행합니다. 그 후 결과도 나중에 사용할 수 있도록 스택에 푸시됩니다. 전체 표현식을 완료한 후 최종 결과도 스택 상단에 저장됩니다. 따라서 표현식이 53+62/*35*+이면 답은 39가 됩니다
표현식이 있다고 가정합니다. 표현식에는 일부 괄호가 있습니다. 괄호의 균형이 맞는지 확인해야 합니다. 괄호의 순서는 (), {}, []입니다. 두 개의 문자열이 있다고 가정합니다. ()[(){()}]는 유효하지만 {[}]는 유효하지 않습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 소진될 때까지 표현식을 탐색합니다. 현재 문자가 (, { 또는 [와 같은 여는 대괄호인 경우 스택에 푸시합니다. 현재 문자가 ), } 또는 ]와 같은 닫는 대괄호이면 스택에서 팝하고 팝업된 대괄호가 해당 시작 대괄호인지 확인 현재 캐릭터라
후보 번호 집합(모든 요소가 고유함)과 대상 번호가 있다고 가정합니다. 후보 번호가 주어진 목표와 합해지는 후보에서 모든 고유한 조합을 찾아야 합니다. 후보자 중에서 동일한 번호가 두 번 이상 선택되지 않습니다. 따라서 요소가 [2,3,6,7,8]이고 대상 값이 8이면 가능한 출력은 [[2,6],[8]]입니다. 단계를 살펴보겠습니다 - 재귀적으로 이것을 해결할 것입니다. 재귀 함수의 이름은 solve()입니다. 이것은 인덱스, 배열 a, 정수 b 및 다른 배열 temp를 취합니다. 해결 방법은 아래와 같이 작동합니다 - 빈 배열
집합이 [1,2,3,...,n]과 같으며 총 n을 포함한다고 가정합니다! 독특한 순열. 모든 순열을 순서대로 나열하고 레이블을 지정하면 n =3에 대해 다음 시퀀스를 얻습니다. [123,132,213,231,312,321] 따라서 n과 k가 주어진 다음 k 번째 순열 시퀀스를 반환합니다. n은 1에서 9(포함) 사이이고 k는 1에서 n 사이입니다! (포함한). 예를 들어 n =3인 경우. 단계를 살펴보겠습니다 - ans :=빈 문자열, 크기가 n인 후보라는 배열 정의 0 ~ n – 1 범위의 i에 대해 후보[i] :=((i +
연결된 목록이 있다고 가정합니다. 목록을 올바른 k 위치로 회전해야 합니다. k 값은 음수가 아닙니다. 따라서 목록이 [1,23,4,5,NULL]이고 k =2이면 출력은 [4,5,1,2,3,NULL]이 됩니다. 단계를 살펴보겠습니다 - 목록이 비어 있으면 null을 반환합니다. len :=1 tail :=head라는 노드 하나 생성 테일의 다음이 null이 아닌 동안 len 1씩 증가 꼬리:=꼬리의 다음 꼬리 다음:=머리 k :=k 모드 렌 newHead :=null for i :=0 ~ len – k 꼬리:=꼬리의 다음
n x m 그리드(n 행 및 m 열)의 왼쪽 상단 모서리에 로봇이 있다고 가정합니다. 로봇은 어느 시점에서든 아래쪽이나 오른쪽으로만 움직일 수 있습니다. 로봇은 그리드의 오른쪽 하단 모서리에 도달하려고 합니다(아래 다이어그램에서 END로 표시됨). 그렇다면 가능한 고유한 경로가 몇 개나 찾아야 할까요? 예를 들어 m =3이고 n =2이면 그리드는 다음과 같습니다. - 로보 종료 출력은 3이므로 시작 위치에서 끝 위치까지 도달하는 총 3가지 방법이 있습니다. 이 경로는 - 오른쪽 → 오른쪽 → 아래쪽
n x m 그리드(n 행 및 m 열)의 왼쪽 상단 모서리에 로봇이 있다고 가정합니다. 로봇은 어느 시점에서든 아래쪽이나 오른쪽으로만 움직일 수 있습니다. 로봇은 그리드의 오른쪽 하단 모서리에 도달하려고 합니다(아래 다이어그램에서 END로 표시됨). 그리드의 일부 셀이 표시되어 장애물로 간주됩니다. 그렇다면 가능한 고유한 경로가 몇 개나 찾아야 할까요? 예를 들어 그리드가 [[0,0,0],[0,1,0],[0,0,0]]과 같으면 그리드는 아래와 같습니다 - 로보 옵스 종료 출력은 2이므로 시
음이 아닌 정수로 채워진 m x n 행렬이 있다고 가정하고 왼쪽 위 모서리에서 오른쪽 아래 모서리까지 경로를 따라 모든 숫자의 합을 최소화하는 경로를 찾습니다. 움직임은 어느 시점에서든 아래 또는 오른쪽에만 있을 수 있습니다. 예를 들어 행렬이 아래와 같다면 1 3 1 1 5 1 4 2 1 출력은 7이고 경로는 1,3,1,1,1이 됩니다. 이렇게 하면 합계가 최소화됩니다. 단계를 살펴보겠습니다 - a :=행 수, b :=열 수 i :=a – 1, j :=b - 1 =0 행렬[a, j] :=행렬[a,
이 문제에서는 (x,y)가 2D 평면에서 한 점의 좌표를 제공하도록 2개의 배열 x[], y[]가 제공됩니다. 우리의 임무는 발생 빈도와 함께 모든 포인트를 인쇄하는 것입니다. 문제를 이해하기 위해 예를 들어보겠습니다. Input: x[]={0, 1, 1, 0, 0} ; y[]={1, 2, 2, 2, 1} Output (0, 1) = 2 (1, 2) = 2 (0, 2) = 1 이 문제를 해결하기 위해서는 각 점의 발생 빈도를 저장해야 합니다. 따라서 지도 데이터 구조를 사용해야 합니다. 맵의 키는 (x[i], y[i]), 매핑된
하나의 m x n 행렬에서 값을 검색하는 효율적인 알고리즘을 작성했다고 가정합니다. 이 행렬에는 다음과 같은 몇 가지 속성이 있습니다. - 각 행은 왼쪽에서 오른쪽으로 정렬됩니다. 각 행의 첫 번째 숫자는 이전 행의 마지막 정수보다 큽니다. 따라서 행렬이 다음과 같은 경우 - 1 3 5 7 10 11 16 20 23 30 34 50 53 62 78 98 그리고 목표 값이 16이면 출력은 True가 됩니다. 단계를 살펴보겠습니다 - n :=행 수, n이 0이면 false 반환, m :=열 수, m =0이면 fal