단일 연결 목록이 있다고 가정하고 다음 규칙을 사용하여 이진 트리 경로로 변환해야 합니다. - 연결 리스트의 선두는 루트입니다. 각 후속 노드는 값이 더 작을 때 부모의 왼쪽 자식이고, 그렇지 않으면 오른쪽 자식이 됩니다. 따라서 입력이 [2,1,3,4,0,5]와 같으면 출력은 이 문제를 해결하기 위해 다음 단계를 따릅니다. − solve() 함수를 정의합니다. 노드가 필요합니다. 노드가 null이면 null 반환 root :=노드의 값과 같은 값으로 트리 노드 생성 다음 노드가 null이 아니면 다음 노드의 값
두 개의 정렬된 연결 목록 L1과 L2가 있다고 가정하면 주어진 두 목록의 합집합인 정렬된 새 연결 목록을 반환해야 합니다. 따라서 입력이 L1 =[10,20,30,40,50,60,70] L2 =[10,30,50,80,90]인 경우 출력은 [10, 20, 30, 40, 50, 60, 70, 80, 90, ] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − solve() 함수를 정의합니다. L1, L2가 걸립니다. L1이 비어 있으면 반환 L2 L2가 비어 있으면 반환 L1 L1의 값
이진 문자열 s가 있다고 가정합니다. 문자열에서 최대 한 쌍의 문자를 교환할 수 있다면 가장 긴 연속 부분 문자열인 1의 결과 길이를 찾아야 합니다. 따라서 입력이 s =1111011111과 같으면 출력은 9가 됩니다. s[4]와 s[9]를 바꿔 9개의 연속적인 1을 얻을 수 있기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − l :=0, cnt :=0, ans :=0 0에서 s 크기의 범위에 있는 r에 대해 다음을 수행합니다. cnt :=cnt + (s[r]이 0일 때 1, 그렇지 않으면 0) 1이면 c
1에 대해 A[i] =A[i - 1] + A[i - 2]가 되도록 가장 긴 부분 시퀀스 A(길이 최소 3)의 길이를 찾아야 합니다. 따라서 입력이 nums =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]와 같으면 다음을 선택할 수 있으므로 출력은 6이 됩니다. [1, 2, 3, 5, 8, 13]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − A :=숫자 n :=A의 크기 maxLen :=0 S :=A의 새로운 세트 0에서 n 사이의 i에 대해 i + 1에서 n 사이의 j에 대해
각 간격이 [시작, 끝] 형식인 간격 목록이 있다고 가정합니다. 겹치는 간격을 몇 개라도 병합하여 만들 수 있는 가장 긴 간격을 찾아야 합니다. 따라서 입력이 [[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]]과 같으면 병합 후와 같이 출력은 9가 됩니다. 길이가 9인 간격 [1, 9]이 있습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 목록 간격 정렬 union :=간격 목록의 첫 번째 간격 최고:=합집합[종료] - 합집합[시작] + 1 첫 번째 시간을 제외한 간격의 각 시작 시간 s 및 종
nums라는 숫자 목록이 있다고 가정하고 각 연속 숫자에서 부호를 뒤집는 가장 긴 부분 수열의 길이를 찾아야 합니다. 따라서 입력이 nums =[1, 3, -6, 4, -3]과 같으면 [1, -6, 4, -3]을 선택할 수 있으므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 양수 :=0, 음수 :=0 숫자 단위의 각 n에 대해 다음을 수행합니다. n <0이면 음수 :=위치 + 1 그렇지 않으면 pos :=부정 + 1 pos 및 neg의 최대값을 반환합니다. 이해를 돕기 위해 다음 구
nums라는 숫자 목록이 있다고 가정합니다. (최소 길이 3) 값이 엄격하게 증가했다가 감소하도록 가장 긴 하위 목록의 길이를 찾아야 합니다. 따라서 입력이 nums =[7, 1, 3, 5, 2, 0]과 같으면 하위 목록이 [2, 4, 6, 3, 1]이므로 출력은 5가 됩니다. 엄격하게 증가하고 감소합니다 . 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i :=0, n :=a의 크기, res :=-무한대 내가
이진 목록이 있다고 가정하고 여기서는 1과 0만 사용할 수 있고 또 다른 숫자 k도 있습니다. 최대 k 0에서 1까지 설정할 수 있으며 모든 1을 포함하는 가장 긴 하위 목록의 길이를 찾아야 합니다. 따라서 입력이 nums =[0, 1, 1, 0, 0, 1, 1] k =2와 같은 경우 출력은 6이 됩니다. 두 개의 중간 0을 1로 설정하면 목록이 다음과 같이 됩니다. [0, 1, 1, 1, 1, 1, 1]. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 0 :=0, ans :=0, j :=0 숫자 단위의 각 인덱스 i와
nums라는 숫자 목록과 또 다른 값 k가 있다고 가정하면 가장 큰 요소와 가장 작은 요소 간의 절대 차이가 ≤ k인 가장 긴 하위 목록의 길이를 찾아야 합니다. 따라서 입력이 nums =[2, 4, 6, 10] k =4와 같은 경우 출력은 3이 됩니다. 여기서 [2, 4, 6]을 선택할 수 있으므로 절대 차이는 4입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 최대 2개의 이중 종료 대기열 만들기 i :=0, res :=1 A의 각 인덱스 j와 값에 대해 다음을 수행합니다. 마지막 요소인 동안 do maxd에서
각 문자가 정렬된 문자열 s가 있고 숫자 k도 있다고 가정하면 모든 문자가 최소한 k번 발생하도록 가장 긴 부분 문자열의 길이를 찾아야 합니다. 따라서 입력이 s =aabccddeeffghij k =2와 같으면 여기서 가장 긴 부분 문자열이 ccddeeff이므로 출력은 8이 됩니다. 여기에서 모든 문자는 최소 2번 발생합니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − rc() 함수를 정의합니다. 시간이 걸립니다 c :=모든 문자와 해당 발생이 포함된 지도 acc :=새 목록 ans :=0 유효:=참 lst의 각 x에
보고 말하기 시퀀스에서 n번째 용어를 생성해야 하는 숫자 n이 있다고 가정합니다. 이것은 몇 개의 항이 아래와 같은 시퀀스입니다 - 1 11 21 1211 111221 문자열은 다음과 같이 읽힙니다. 1(하나) 11 (One 1) 그래서 앞의 1을 읽고 One 1이라고 말하세요 21 (Two 1) 그래서 앞의 11을 읽고 Two 1이라고 말하세요 1211 (One 2 One 1) 그래서 앞의 21을 읽고 One 2 one 1이라고 말하세요. 111221 (하나 1 하나 2 둘 1) 그래서 앞의 1211을 읽고 하나 1 하나
중첩된 정수 목록이 주어지면 목록에 있는 모든 정수의 합을 깊이로 가중치를 부여하여 반환합니다. 각 요소는 정수이거나 목록입니다. 요소의 요소는 정수 또는 기타 목록일 수도 있습니다. 가중치가 루트에서 리프로 증가하는 이전 질문과 달리 이제 가중치는 아래에서 위로 정의됩니다. 즉, 리프 수준 정수는 가중치가 1이고 루트 수준 정수는 가장 큰 가중치를 갖습니다. 따라서 입력이 [[1,1],2,[1,1]]과 같으면 출력은 깊이 1에서 4개의 1, 깊이 2에서 하나의 2로 8이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다.
nums라는 숫자 목록과 다른 값 대상이 있다고 가정합니다. 목표보다 큰 숫자 쌍의 가장 낮은 합을 찾아야 합니다. 따라서 입력이 nums =[2, 4, 6, 10, 14] target =10과 같으면 2와 10을 선택하므로 출력은 12가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 목록 번호 정렬 n :=숫자 크기 답변 :=10^10 i :=0, j :=n - 1 내가
n 값을 포함하는 nums라는 숫자 목록이 있다고 가정합니다. 여기서 각 숫자는 후보자에 대한 투표를 나타냅니다. floor(n/2)개 이상의 득표수를 가진 후보자의 id를 찾아야 하고, 과반수 득표가 없으면 -1을 반환합니다. 따라서 입력이 nums =[6, 6, 2, 2, 3, 3, 3, 3, 3]과 같으면 출력은 3이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − l :=숫자 크기 count :=각 개별 숫자와 해당 발생을 포함하는 지도 count의 각 숫자 i와 발생 j에 대해 수행 (l / 2)이면
코인 목록과 다른 가치 금액이 있다고 가정하면 해당 합계 금액에 해당하는 조합의 수를 찾아야 합니다. 답이 매우 크면 결과를 10^9 + 7로 수정합니다. 따라서 입력이 동전 =[2, 5] amount =10과 같으면 출력은 2가 됩니다. 이러한 조합을 만들 수 있으므로 - [2, 2, 2, 2, 2], [5, 5] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=10^9 + 7 dp :=amount + 1과 같은 크기의 리스트, 0으로 채움 dp[0] :=1 동전의 각 d에 대해 다음을 수행합니다. 범위 1에서 d
이진 행렬이 있다고 가정합니다. 우리는 동일한 행렬을 찾아야 하지만 각 셀의 값은 가장 가까운 0에 대한 맨해튼 거리가 될 것입니다. 우리는 행렬에 적어도 하나의 0이 있다고 가정할 수 있습니다. 따라서 입력이 다음과 같으면 1 0 1 1 0 1 1 1 0 그러면 출력은 1 0 1 1 0 1 2 1 0 왼쪽 하단 셀만 2에서 가장 가까운 0까지의 거리를 갖기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − m :=행렬의 행 크기, n :=행렬의 열 크기 0~m 범위의 y에 대해 0에서 n
각 행과 열이 내림차순으로 정렬되어 있는 2D 행렬이 있다고 가정하면 n번째로 작은 수를 찾아야 합니다. 따라서 입력이 다음과 같으면 2 4 30 3 4 31 6 6 32 그리고 n =4이면 출력은 6이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − lst :=새 목록 행렬 i의 각 행에 대해 다음을 수행합니다. i의 각 셀 j에 대해 다음을 수행합니다. lst 끝에 j 삽입 목록 정렬 1st[n] 반환 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − 예시 class Solution: &n
각 행과 열이 내림차순으로 정렬되어 있는 2D 행렬이 있다고 가정하면 주어진 대상이 그 안에 있는지 여부를 확인해야 합니다. 따라서 입력이 다음과 같으면 2 4 30 3 4 31 6 6 32 그리고 target =31이면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − col :=행렬의 열 크기 - 1 행렬 크기 범위 0에서 행렬의 i에 대해 다음을 수행합니다. =0, do col :=col - 1 행렬[i, col]이 대상과 같으면 참 반환 거짓을 반환 이해를 돕기 위
nums라는 숫자 목록이 있다고 가정합니다. 숫자를 선택한 다음 제거하고 숫자와 인접한 두 숫자의 합으로 점수를 높이는 작업을 고려해 보겠습니다. 목록에서 첫 번째 또는 마지막 숫자를 선택하지 않는 한 이 작업을 원하는 만큼 수행할 수 있습니다. 가능한 최대 점수를 찾아야 합니다. 따라서 입력이 nums =[2, 3, 4, 5, 6]과 같으면 5를 선택할 수 있으므로 출력은 39가 되고 합계는 (4 + 5 + 6) =15가 되고 배열은 [2, 3, 4, 6]이고 4를 선택하면 합계는 (3 + 4 + 6) =13이고 배열은 [2,
num이라는 숫자 목록과 다른 값 k가 있다고 가정합니다. 정확히 k번 팝해야 하는 경우 삭제할 수 있는 요소의 최대 합을 찾아야 합니다. 여기서 각 팝은 왼쪽 또는 오른쪽 끝에서 올 수 있습니다. 따라서 입력이 nums =[2, 4, 5, 3, 1] k =2와 같으면 2와 4를 삭제할 수 있으므로 출력은 6이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − window :=인덱스 0부터 k - 1까지의 모든 숫자의 합계 ans :=창 1~k 범위의 i에 대해 다음을 수행합니다. 창 :=창 - 숫자[k - i] 창