단일 연결 목록이 있다고 가정하고 k번째 마지막 노드(0-인덱싱됨)의 값을 찾는지 확인해야 합니다. 우리는 이것을 한 번에 해결해야 합니다. 따라서 입력이 node =[5,4,6,3,4,7], k =2와 같으면 두 번째 마지막(인덱스 3) 노드의 값이 3이므로 출력은 3이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − klast :=노드 마지막 :=노드 범위 0에서 k에 있는 i에 대해 수행 마지막 :=마지막의 다음 마지막의 다음이 null이 아닌 동안 수행 마지막 :=마지막의
nums라고 하는 정렬된 고유 번호 목록과 정수 k가 있다고 가정하면 주어진 목록의 첫 번째 요소에서 k번째 누락된 숫자를 찾아야 합니다. 따라서 입력이 nums =[5,6,8,10,11], k =1과 같으면 9가 두 번째(인덱스 1) 누락된 숫자이므로 출력은 9가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 범위 1에서 숫자 크기까지의 i에 대해 diff :=숫자[i] - 숫자[i - 1] - 1 =diff이면 k :=k - 차이 그렇지 않으면 반환 숫자[i - 1] + k +
이진 검색 트리가 있고 또 다른 정수 k가 트리에서 k번째로 작은 값을 찾아야 한다고 가정합니다. 따라서 입력이 다음과 같으면 k =3이면 출력은 7이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 스택 :=빈 스택 나는 :=0 as :=-1 스택이 비어 있지 않거나 루트가 null이 아닌 동안 수행 루트가 null이 아닌 동안 수행 스택에 루트 푸시 root :=root의 왼쪽 v :=스택에서 요소 팝 i가 k와 같으면 as :=v의 값 루프에서
소문자 알파벳 문자열과 다른 숫자 k가 있다고 가정하고 결과 문자열이 최대 k개의 고유한 문자를 갖도록 문자열에서 필요한 변경의 최소 수를 찾아야 합니다. 이 경우 변경 사항은 실제로 한 캐릭터를 다른 캐릭터로 변경하는 것입니다. 따라서 입력이 s =wxxyyzzxx, k =3과 같으면 출력은 1이 됩니다. 문자 w를 제거하여 3개의 고유한 문자(x, y 및 z)를 얻을 수 있기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − count :=s에 있는 각 문자의 맵과 빈도 sv :=빈도 값의 정렬된 목
문자열 단어 목록이 있다고 가정하고 모든 아나그램을 함께 그룹화하고 가장 큰 그룹의 크기를 반환해야 합니다. 따라서 입력이 단어 =[xy, yx, xyz, zyx, yzx, wwwww]와 같으면 출력은 [xyz, zyx와 같이 3이 됩니다. , yzx]가 가장 큰 그룹입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 조회 :=새 지도, 처음에는 비어 있음 해상도 :=0 단어의 각 i에 대해 수행 p :=사전순으로 i 정렬 p가 조회 중이면 개수를 늘리고 그렇지 않으면 1 res :=최대
nums라고 하는 숫자 목록과 정수 k가 있다고 가정하고 목록에서 가장 큰 정수와 가장 작은 정수의 차이가 가능한 한 작아지도록 크기 k의 목록을 만들기 위해 nums에서 요소를 선택해야 합니다. 그리고 우리는 이 차액을 반환할 것입니다. 따라서 입력이 nums =[3, 11, 6, 2, 9], k =3과 같으면 우리가 만들 수 있는 최상의 목록이 [2, 3, 6]이므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 목록 번호 정렬 ls :=새 목록 범위 0에서 숫자 크기 - k + 1
숫자 nums의 목록이 있다고 가정하고 이제 nums의 시작과 끝이 이웃인 숫자의 순환 목록을 고려하십시오. 순환 목록에서 비어 있지 않은 하위 목록의 최대 합계를 찾아야 합니다. 따라서 입력이 nums =[2, 3, -7, 4, 5]와 같으면 출력은 14가 됩니다. 합이 14인 하위 목록 [4, 5, 2, 3]을 사용할 수 있기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − max_sum :=음의 무한대, cur_max :=0 min_sum :=양의 무한대, cur_min :=0 숫자의 각 숫
배열 A가 있다고 가정합니다. 최대합이 있는 연속적인 하위 목록을 찾고 그 합도 반환해야 합니다. 따라서 배열 A가 A =[-2,1,-3,4,-1,2,1,-5,4]와 같으면 합계는 6이 됩니다. 그리고 하위 배열은 [4, -1, 2, 1]. 이 문제를 해결하기 위해 동적 프로그래밍 방식을 사용하려고 합니다. A의 크기와 동일한 배열 dp를 정의하고 0으로 채웁니다. dp[0] :=A[0] for i :=1 ~ A – 1 dp[i] :=dp[i – 1] + A[i] 및 A[i]의 최대값 최대 dp를 반
nums라는 숫자 목록이 있다고 가정하고 인접하지 않은 숫자의 가장 큰 합계를 반환하는 함수를 정의합니다. 여기서 숫자는 0 또는 음수일 수 있습니다. 따라서 입력이 [3, 5, 7, 3, 6]과 같으면 3, 7, 6을 사용하여 get16을 얻을 수 있으므로 출력은 16이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- 숫자의 크기가 <=2이면 최대 숫자 반환 노테이크 :=0 가져 가라 :=nums[0] 범위 1에서 숫자 크기까지의 i에 대해 take :=noTake + nums[
이진 트리가 있다고 가정합니다. 두 노드 사이의 모든 경로의 최대 합을 찾아야 합니다. 따라서 입력이 다음과 같으면 노드가 [12,13,14,16,7]이므로 출력은 62가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − utils() 함수를 정의합니다. 이것은 뿌리를 내릴 것입니다 루트가 null이면 0 반환 l :=utils(루트 왼쪽) r :=utils(루트 오른쪽) max_single :=(l 및 r의 최대값) + 루트 값) 및 루트 값의 최대값 max_top :=
0에서 n까지의 값을 포함하는 하나의 n × n 행렬이 있다고 가정합니다. 여기서 0은 채워지지 않은 사각형을 나타내며 각 행과 각 열에 1에서 n까지의 모든 숫자가 정확히 한 번 나타나도록 빈 사각형을 채울 수 있는지 확인해야 합니다. 따라서 입력이 다음과 같으면 0 0 2 2 0 1 1 2 3 행렬을 로 설정할 수 있으므로 출력은 True가 됩니다. 3 1 2 2 3 1 1 2 3 이 문제를 해결하기 위해 다음 단계를 따릅니다. − find_empty_cell() 함수를 정의하십시오. 행렬이 필요합니
이진 트리가 있다고 가정합니다. 모든 잎이 같은 수준에 있는지 확인해야 합니다. 따라서 입력이 다음과 같으면 그러면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − dfs() 함수를 정의합니다. 이것은 뿌리를 내릴 것입니다, d 루트가 null이 아니면 루트의 왼쪽이 null이고 루트의 오른쪽이 null이면 깊이 끝에 d 삽입 그렇지 않으면 dfs(루트 왼쪽, d + 1) dfs(루트의 오른쪽, d + 1) 기본 방법에서 다음을 수행하십시오
이진 트리가 있다고 가정합니다. 가장 깊은 노드의 값을 찾아야 합니다. 가장 깊은 노드가 두 개 이상 있으면 가장 왼쪽에 있는 가장 깊은 노드를 반환합니다. 따라서 입력이 다음과 같으면 4와 7이 가장 깊지만 4가 가장 많이 남으므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − queue :=하나의 노드 루트가 있는 큐입니다. left_max :=루트 값 0 동안 수행 level_size :=큐의 크기 범위 0에서 level_size까지의 i에 대해 수행 temp
대괄호 ( 및 )를 포함하는 문자열 s가 있다고 가정하고 균형 대괄호의 가장 긴 부분 시퀀스의 길이를 찾아야 합니다. 따라서 입력이 s =())(()(와 같으면 출력은 ()()과 같은 하위 시퀀스를 취할 수 있으므로 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 해상도 :=0 n :=s의 크기 닫기 :=0 범위 n - 1에서 0의 i에 대해 1씩 감소, 수행 s[i]가 )와 같으면 닫기 :=닫기 + 1 그렇지 않으면 0이면 닫기 :=닫기 - 1 res
이진 트리가 있다고 가정하고 왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로 교대로 각 레벨의 값을 표시해야 합니다. 따라서 입력이 다음과 같으면 그러면 출력은 [5, -10, 4, -2, -7, 15]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 루트가 null이면 새 목록 반환 s1 :=처음에 루트를 삽입하는 목록 s2 :=새 목록 res :=새 목록 s1이 비어 있지 않거나 s2가 비어 있지 않은 동안 수행 s1이 비어 있지 않은 동안 수행 node :=s1에서
이진 검색 트리가 있다고 가정하고 levelorder 순회를 사용하여 단일 연결 목록으로 변환해야 합니다. 따라서 입력이 다음과 같으면 그러면 출력은 [5, 4, 10, 2, 7, 15, ]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − head :=새로운 연결 리스트 노드 currNode :=머리 q :=값이 루트인 목록 q가 비어 있지 않은 동안 수행 curr :=q에서 첫 번째 요소 삭제 curr이 null이 아니면 currNode의 다음:=curr 값을 가진 새
크기가 n인 정렬된 연결 목록 노드가 있다고 가정하고 k =floor of (n / 2)의 가장 작은 값을 루트로 설정하여 이진 검색 트리를 만들어야 합니다. 그런 다음 k번째 노드의 왼쪽 연결 목록을 사용하여 왼쪽 하위 트리를 재귀적으로 구성합니다. 그리고 k번째 노드의 우측 연결 리스트를 이용하여 우측 서브트리를 재귀적으로 구성한다. 따라서 입력이 [2,4,5,7,10,15]와 같으면 출력은 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- solve() 메서드를 정의하면 노드가 필요합니다. 노드가 null이
빨간색, 녹색 및 파란색이 포함될 수 있는 색상 문자열 목록이 있다고 가정하고 빨간색이 녹색보다 먼저 오고 녹색이 파란색보다 먼저 오도록 목록을 분할해야 합니다. 따라서 입력이 colors =[blue,green, blue, red, red]인 경우 출력은 [red, red, green, 파란색, 파란색] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 녹색:=0, 파란색:=0, 빨간색:=0 str의 각 문자열에 대해 수행 문자열이 빨간색과 같으면 strs[blue] :=파란색 파란색 :=파란색
한 번 발생하는 하나의 값을 제외하고 각 값이 정확히 세 번 발생하는 nums라는 숫자 목록이 있다고 가정합니다. 고유한 가치를 찾아야 합니다. 일정하지 않은 공간을 해결해야 합니다. 따라서 입력이 nums =[3, 3, 3, 8, 4, 4, 4]와 같으면 출력은 8이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=값과 빈도가 다른 지도 최소 빈도로 값을 반환 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − 예시 from collections import Counter class Solut
nums라는 숫자 목록이 있다고 가정하고 새 목록의 각 요소가 원래 입력 목록의 해당 요소 오른쪽에 있는 더 작은 요소의 수인 새 목록을 생성합니다. 따라서 입력이 nums =[4, 5, 9, 7, 2]와 같으면 출력은 [1, 1, 2, 1, 0]이 됩니다. 4의 오른쪽에 1개의 더 작은 요소가 있기 때문입니다. 5의 오른쪽에 1개의 작은 요소, 9의 오른쪽에 2개의 작은 요소, 7의 오른쪽에 1개의 작은 요소, 2의 오른쪽에 더 작은 요소가 없습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − res :=새 목록