2차원 행렬 M이 있다고 가정합니다. 이제 각 셀에 색상을 나타내는 값이 포함되고 동일한 색상을 가진 인접 셀(위, 아래, 왼쪽, 오른쪽)이 함께 그룹화됩니다. 이제 한 그룹의 모든 셀을 특정 색상으로 설정하는 작업을 고려하십시오. 그런 다음 마지막으로 모든 셀이 동일한 색상을 갖도록 필요한 최소 작업 수를 찾습니다. 그리고 색상이 변경되면 다시 설정할 수 없습니다. 따라서 입력이 다음과 같으면 2 2 2 2 1 1 1 1 2 3 2 1 그러면 출력은 2가 됩니다. 2가 있는
행과 열의 수가 같은 행렬 M과 대상 행렬 T가 있다고 가정합니다. 이제 모든 1이 0으로 변환되고 모든 0이 1로 변환되도록 행렬의 특정 열을 뒤집는 작업을 가정합니다. 따라서 행렬 행을 무료로 재정렬할 수 있다면 M을 T로 바꾸는 데 필요한 최소 연산 수를 찾으십시오. 해가 없으면 -1을 반환합니다. 따라서 입력이 M =와 같은 경우 0 0 1 0 1 1 T = 0 1 1 0 1 1 그러면 먼저 행을 다음과 같이 재정렬하므로 출력은 1이 됩니다. 0 0
이진 트리가 있다고 가정합니다. 이것이 완전한 이진 트리인지 여부를 확인해야 합니다. 완전한 이진 트리에서 알 수 있듯이 레벨은 마지막 가능성을 제외하고 노드로 채워지며 마지막 레벨의 모든 노드는 가능한 한 가장 왼쪽에 있습니다. 따라서 입력이 다음과 같으면 그러면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- q :=이중 종료 큐 q의 끝에 루트 삽입 플래그 :=거짓 q가 비어 있지 않은 동안 수행 temp :=q 왼쪽에서 삭제 후 요소 temp가 null이
[0, n) 범위의 숫자로 표시되는 n개의 도시가 있고 한 도시를 다른 도시로 연결하는 일방통행 도로 목록도 있다고 가정합니다. 어느 도시에서나 갈 수 있는지 확인해야 합니다. 따라서 입력이 n =3과 같으면 도로 =[[0, 1],[0, 2],[1,0],[1,2],[2,0],[2,1]] , 0에서 1로, 1에서 0으로 갈 수 있으므로 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- dfs() 함수를 정의합니다. 이렇게 하면 i, 방문, g가 소요됩니다. 내가 방문한 것으로 표시 g[
일부 숫자가 포함된 문자열 s가 있다고 가정하고 연속적으로 내림차순 정수를 포함하는지 여부를 확인해야 합니다. 따라서 입력이 s =99989796과 같으면 이 문자열이 [99,98,97,96]을 유지하므로 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- helper() 함수를 정의합니다. 이것은 pos가 필요합니다. prev_num pos가 n과 같으면 참을 반환 num_digits :=prev_num의 자릿수 num_digits - 1에서 num_digits 범위의
nums라는 고유 숫자 목록이 있다고 가정합니다. 우리는 각 목록이 숫자로 연속적인 숫자를 요약하는 포함 간격을 나타내는 정렬된 2D 숫자 행렬을 찾아야 합니다. 따라서 입력이 nums =[10, 11, 12, 15, 16, 17, 28, 30]과 같으면 출력은 [[10, 12], [15, 17], [28, 28]이 됩니다. , [30, 30]]과 같이 [10~12], [15~17]이 인접하고, 28~30이 존재하고, [28~28], [30~30]으로 표현된다. 이 문제를 해결하기 위해 다음 단계를 따르겠습니다- 목록 번호
하나의 숫자 n이 있다고 가정하고 [0, n)의 숫자로 생성할 수 있는 고유한 BST의 수를 찾아야 합니다. 대답이 매우 큰 경우 결과는 10^9+7입니다. 따라서 입력이 n =3과 같으면 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 숫자:=1 명:=n + 1 1~n 범위의 i에 대해 숫자 :=숫자 * n + 나 숫자 :=숫자 모드 m denom :=denom * i denom :=denom 모드 m 숫자 :=숫자 * (denom^(m-2)) mod m 반환 번호 모드 m 이해를 돕기
괄호 ( 및 )로 구성된 문자열이 있다고 가정합니다. 괄호의 균형이 맞는지 확인해야 합니다. 따라서 입력이 s =(()())(())와 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − num_open :=0 s의 각 문자 c에 대해 다음을 수행합니다. c가 )와 같으면 num_open <0이면 num_open :=num_open - 1 그렇지 않으면 거짓을 반환 그렇지 않으면 num_open :=num_open + 1 num_open의 역반환 이해를 돕기 위해 다음 구
대괄호 문자열(둥근, 둥근 모양, 정사각형)이 있다고 가정하고 대괄호가 균형을 이루는지(정형화된) 여부를 확인해야 합니다. 따라서 입력이 s =([()()]{[]})()와 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 스택 :=새 목록 d :=키-값 쌍이 있는 해시 맵(}, {),(),(), (], [) s의 각 문자 c에 대해 다음을 수행합니다. c가 }]) 중 하나이면 스택이 비어 있거나 스택의 맨 위가 d[c]와 같지 않으면 거짓을 반환 스택에서 팝 그렇지 않으면 c를 스택
낮음과 높음의 두 값인 BST가 있다고 가정하면 [낮음, 높음](포함) 사이가 아닌 모든 노드를 삭제해야 합니다. 따라서 입력이 다음과 같으면 낮음 =7 높음 =10이면 출력은 다음과 같습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − solve() 함수를 정의합니다. 이것은 뿌리를 내릴 것입니다, 낮음, 높음 루트가 null이면 반환 루트의 데이터, 그러면 반환 해결(루트 오른쪽, 낮음, 높음) 높은 <루트의 데이터이면 해결 반환(루트 왼쪽, 낮음, 높음) 루트 오른쪽 :=해결(루트 오른쪽,
이진 트리가 있다고 가정합니다. 이진 탐색 트리인지 아닌지 확인해야 합니다. 우리가 알고 있듯이 BST에는 다음과 같은 속성이 있습니다 - 왼쪽 하위 트리의 모든 노드가 현재 노드 값보다 작음 오른쪽 하위 트리의 모든 노드가 현재 노드 값보다 큽니다. 이 속성은 모든 노드에 대해 재귀적으로 유지됩니다. 따라서 입력이 다음과 같으면 그러면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − x :=트리 요소의 중위 순회 시퀀스 목록 x가 정렬되면 참을 반환 거짓 반환 이해를 돕기 위해
문자열 s가 있다고 가정하고 주어진 문자열 s의 두 문자 간에 최대 한 번만 교환할 수 있는 경우 만들 수 있는 사전순으로 가장 작은 문자열을 찾아야 합니다. 따라서 입력이 zyzx와 같으면 출력은 xyzz가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − temp :=크기가 s이고 0으로 채워진 배열 m:=s의 크기 - 1 s -1 ~ -1 범위 크기의 i에 대해 1 감소, do s[i]
단일 연결 목록과 하나의 대상이 있다고 가정하고 대상과 값이 동일한 모든 노드를 삭제한 후 동일한 연결을 반환해야 합니다. 따라서 입력이 [5,8,2,6,5,2,9,6,2,4]와 같으면 출력은 [5, 8, 6, 5, 9, 6, 4, ]입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 헤드:=노드 node와 node.next가 null이 아닌 동안 do 다음 노드의 값이 target과 같을 때 do 다음 노드 :=다음 노드 노드:=노드의 다음 head의 값이 target과 같으면 머리 다음 반환 그렇지
단일 연결 목록이 있다고 가정합니다. 연결 리스트는 가장 중요한 자릿수가 먼저 있는 이진수를 나타내므로 십진수로 반환해야 합니다. 따라서 입력이 [1,0,1,1,0]과 같으면 출력은 22가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − l :=새 목록 노드가 null이 아닌 동안 수행 l 끝에 노드 값 삽입 노드:=노드의 다음 k :=0, v:=0 범위 크기가 l - 1에서 0인 i에 대해 1만큼 감소, do l[i]가 1과 같으면 v :=v + 2^k k :=k + 1 반환 v 이해를 돕기 위해
nums라는 숫자 목록이 있고 +, -, / 또는 *와 같은 연산자를 나타내는 또 다른 문자열 op가 있고 또 다른 값 val도 제공된다고 가정합니다. val을 사용하여 숫자를 입력하고 결과를 반환합니다. 따라서 입력이 [5,3,8]과 같으면 출력은 [15, 9, 24]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − res:=새 목록 숫자 단위의 각 i에 대해 다음을 수행합니다. op가 +와 같으면 res 끝에 i+val 삽입 그렇지 않으면 op가 -와 같을 때 then res 끝에 i-val 삽입 그
nums라는 숫자 목록을 제공했다고 가정하고 값을 동일하게 만들고 싶습니다. 이제 목록에서 하나의 요소를 선택하고 다른 모든 값을 증가시키는 작업을 시작합니다. 요소 값을 동일하게 만드는 데 필요한 최소 작업 수를 찾아야 합니다. 따라서 입력이 [2, 4, 5]와 같으면 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − min_val :=최소 숫자 s :=0 숫자 단위의 각 숫자에 대해 다음을 수행합니다. s :=s + (num - min_val) 반환 이해를 돕기 위해 다음 구현을 살펴보겠습니다
nums라는 숫자 목록이 있다고 가정하고 모든 nums[i]를 i의 왼쪽에 있는 가장 작은 요소로 바꿔야 합니다. nums[0]을 0으로 바꿔야 합니다. 따라서 입력이 [15, 7, 9, 16, 12, 25]와 같으면 출력은 [0, 15, 7, 7, 7, 7]이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − nums가 비어 있으면 새 목록 반환 j:=숫자[0] 숫자[0]:=0 범위 1에서 숫자 - 1까지의 i에 대해 k:=숫자[i] 숫자[i]:=j j:=j, k의 최소값 반환 번호 이해를 돕기 위해
소문자 문자열 목록이 있다고 가정하고 가장 긴 공통 접두사를 찾아야 합니다. 따라서 입력이 [안티바이러스, 반시계방향, 반중력]과 같으면 출력은 안티가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 목록 단어를 알파벳순으로 정렬 접두사 :=새 목록 플래그 :=0 0에서 단어 크기[0] 사이의 i에 대해 단어의 각 j에 대해 수행 j[i]가 접두사의 마지막 요소와 같지 않으면 접두사에서 마지막 요소 삭제 플래그 :=1 루프에서 나오다 플래그가 1과 같으면 루프에서 나오다 접두사 배열에 있는 모든
문자열 s가 있다고 가정하고 동일한 문자를 가진 가장 긴 부분 문자열의 길이를 찾아야 합니다. 따라서 입력이 abbbaccabbbba와 같으면 4개의 연속 b가 있으므로 출력은 4가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − s의 크기가 0이면 0을 반환 s :=공백 연결 ct:=1, 시간:=1 0에서 s -2 크기의 범위에 있는 i에 대해 다음을 수행합니다. s[i]가 s[i+1]과 같으면 항목 :=항목 + 1 그렇지 않으면 ct:=temp 및 ct의 최대값 항목:=1 ct를 반환 이해를
길이가 n인 두 개의 문자열 s와 t가 있다고 가정합니다. s에서 한 문자를 가져오고 t에서 다른 문자를 가져와서 바꿀 수 있습니다. 우리는 무제한 스왑을 할 수 있습니다. 두 문자열을 동일하게 만드는 것이 가능한지 여부를 확인해야 합니다. 따라서 입력이 s =xy, t =yx와 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − st:=s와 t를 연결한 후 문자열 정렬 범위 0에서 st - 1 크기의 i에 대해 2만큼 증가, do st[i]가 st[i+1]과 같지 않으면 거짓을 반환