각 요소의 길이가 같고 각 요소에 문자 A, C, G 및/또는 T가 포함되어 있는 유전자라는 문자열 목록이 있다고 가정합니다. 이제 몇 가지 규칙이 있습니다 - 두 문자열 s1과 s2가 한 문자를 제외하고 동일한 문자열이면 s1과 s2는 동일한 돌연변이 그룹에 있습니다. 두 개의 문자열 s1과 s2가 그룹에 있고 s2와 s3이 그룹에 있으면 s1과 s3은 같은 그룹에 있습니다. 생성할 수 있는 돌연변이 그룹의 총 수를 찾아야 합니다. 따라서 입력이 [ACGT, ACGC, ACTT, TTTT, TGTT]와 같은 입력
이진 트리가 있다고 가정합니다. 높이가 균형을 이루고 있는지 확인해야 합니다. 우리는 높이 균형 트리의 경우 트리의 모든 노드에 대해 왼쪽 하위 트리 높이와 오른쪽 하위 트리 높이의 절대 차이가 0 또는 1이라는 것을 알고 있습니다. 따라서 입력이 다음과 같으면 그러면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − dfs() 함수를 정의하면 노드가 필요합니다. 노드가 null이면 - 0 반환 l :=1 + dfs(노드 왼쪽) r :=1 + dfs(노드 오른쪽)
숫자 n이 있다고 가정하고 이진 표현에서 가장 긴 연속 1의 길이를 찾아야 합니다. 따라서 입력이 n =312와 같으면 출력은 3이 됩니다. 312는 이진수로 100111000이고 3개의 연속적인 1이 있기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ret :=0, len :=0 initialize i :=0의 경우, i <32일 때 업데이트(i를 1만큼 증가), 수행: n/2가 홀수이면 (len 1씩 증가) 그렇지 않으면 len :=0 ret :=ret 및 le
이진 트리가 있다고 가정하고 왼쪽에서 트리를 보면 일부 요소를 볼 수 있습니다. 이러한 요소를 표시해야 합니다. 트리가 다음과 같다면 - 출력은 [1,2,5]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ret 배열 정의 dfs() 함수를 정의하면 노드가 필요하고 c는 1로 초기화합니다. 노드가 null이면 - 반환 lvl이면 - 레벨 :=c 노드의 값을 ret에 삽입 dfs(노드의 왼쪽, c + 1) dfs(노드 오른쪽, c + 1) 기본 방법에
이진 트리가 있다고 가정합니다. 레벨 순서 순회 방식을 사용하여 이 트리를 순회해야 합니다. 트리가 다음과 같다면 순회 순서는 다음과 같습니다. [1,2,3,5,4] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 노드를 저장하기 위한 큐 정의 쿼리에 루트를 삽입합니다. que가 비어 있지 않은 동안 수행 item :=큐의 맨 앞에 있는 항목 항목의 값 인쇄 항목의 왼쪽이 null이 아니면 왼쪽 항목을 que에 삽입 항목의 오른쪽이 null이 아니면 항목의 오른쪽을 que에 삽입
이진 트리가 있고 루트의 수준이 1이고 자식의 수준이 2 등이라고 가정합니다. 수준 X에 있는 노드의 모든 값의 합이 최소가 되도록 가장 작은 수준 X를 찾아야 합니다. 트리가 다음과 같다면 - 합이 최소값인 4 – 10 =-6이므로 출력은 2가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − level :=1, sum :=r의 값, ansLevel :=level, ansSum :=sum 큐 q를 정의하고 주어진 노드 r을 q에 삽입 q가 비어 있지 않은 동안 용량 :=q의 크기 레벨을
nums라는 숫자 목록이 있고 또 다른 숫자 k가 있다고 가정하고 각 목록에 k 값이 포함되어 있고 값이 연속적으로 증가하는 목록으로 분할할 수 있는지 확인해야 합니다. 따라서 입력이 nums =[4, 3, 2, 4, 5, 6], k =3과 같으면 목록을 [2, 3, 4] 및 [ 4, 5, 6] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 하나의 지도 정의 각 키에 대해 m m[it]을 1 증가 확인 :=사실 동안 (m의 크기는 0이 아니고 ok는 참임) − 확인 :=거짓 각 키-
숫자 목록이 있다고 가정합니다. 가장 긴 bitonic 부분 시퀀스의 길이를 찾아야 합니다. Aswe 매듭 시퀀스는 엄격하게 증가했다가 엄격하게 감소하는 경우 바이토닉(bitonic)이라고 합니다. 엄격하게 증가하는 시퀀스는 bitonic입니다. 또는 엄격하게 감소하는 시퀀스도 bitonic입니다. 따라서 입력이 nums =[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15], 시퀀스 크기 16과 같으면 출력은 7이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i
두 개의 문자열 text1과 text2가 있다고 가정하고 가장 긴 공통 부분 시퀀스의 길이를 찾아야 합니다. 우리가 알고 있듯이 문자열의 하위 시퀀스는 나머지 문자의 상대적 순서를 변경하지 않고 일부 문자가 삭제된 원래 문자열에서 생성된 새 문자열입니다. (예를 들어 abe는 abcde의 하위 시퀀스이지만 adc는 그렇지 않습니다). 두 문자열의 공통 부분 수열은 두 문자열에 공통적인 부분 수열입니다. 따라서 공통 부분 수열이 없으면 0을 반환합니다. 입력이 abcde 및 ace와 같으면 결과는 3이 됩니다. 이 문제를 해결하기
두 개의 소문자 문자열 X와 Y가 있다고 가정하고 가장 긴 공통 부분 문자열의 길이를 찾아야 합니다. 따라서 입력이 X =helloworld, Y =worldbook과 같으면 world가 가장 긴 공통 부분 문자열이고 길이가 5이므로 출력은 5가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 가장 긴 크기의 배열 정의:m+1 x n+1. len :=0 초기화 i :=0의 경우, i <=m일 때 업데이트(i를 1만큼 증가), − 초기화 j :=0의 경우 j <=n일 때 업데이트(j를 1만큼 증가
두 개의 이진 트리가 있고 그 중 하나를 다른 하나를 덮을 때 두 트리의 일부 노드는 겹치고 다른 노드는 겹치는 경우를 가정해 보겠습니다. 우리는 그것들을 새로운 이진 트리로 병합해야 합니다. 병합 규칙은 두 개의 노드가 겹치면 병합된 노드의 새 값으로 노드 값을 합산하는 것과 같습니다. 그렇지 않으면 비어 있지 않은 노드가 새 트리의 노드로 사용됩니다. 따라서 나무가 - 그러면 출력은 -가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 메소드는 solve()입니다. 이것은 두 개의 트리 노드 n1과
양수 n이 있다고 가정하면 합이 n인 완전제곱수의 최소 수를 찾아야 합니다. 따라서 숫자가 10이면 10 =9 + 1이므로 출력은 2입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 길이가 n + 1인 동적 프로그래밍을 위한 하나의 테이블을 만들고 무한대로 채웁니다. dp[0] :=0 for i :=1, i*i <=n일 때 x =나는 * 나는 j의 경우 :=x에서 n dp[j] :=dp[j] 및 1 + dp[j – x]의 최소값 반환 dp[n] 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − 예시 #inc
접미사 표현식이 있고 값을 평가해야 한다고 가정합니다. 후위 표현은 역 광택 표기법으로도 알려져 있습니다. 여기서 우리는 접미사 표현식을 풀기 위해 스택 데이터 구조를 사용해야 합니다. 따라서 표현식이 21+3*이면 답은 9가 됩니다. 단계를 살펴보겠습니다 - 접미사 식의 각 문자 ch에 대해 do ch가 $\odot$ 연산자이면 a :=스택에서 첫 번째 요소 팝, b :=스택에서 두 번째 요소 팝 res :=b $\odot$ a 스택에 res를 푸시 ch가 피연산자이면 스택에 ch 추가 스택 상단의 반환 요소
간격 집합이 있다고 가정합니다. 나머지 구간이 겹치지 않게 하기 위해 제거해야 하는 최소 구간 수를 찾아야 합니다. 따라서 간격이 [[8,10],[3,5],[6,9]]이면 출력은 1이 됩니다. 다른 모든 항목이 겹치지 않게 하려면 [6,9]를 제거해야 하기 때문입니다. . 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=배열의 크기 n이 0이면 0을 반환 카운트:=1 간격의 종료 시간을 기준으로 배열 정렬 end :=첫 번째 간격의 종료 날짜 1 ~ n – 1 범위의 i에 대해 =end이면 end :=arr[i]의 종
nums라는 숫자 목록과 또 다른 숫자 k가 있다고 가정하면 목록에서 최대 한 번만 하위 목록을 제거할 수 있습니다. k보다 엄격하게 작은 숫자와 k보다 큰 숫자의 양이 같도록 가장 긴 결과 목록의 길이를 찾아야 합니다. 따라서 입력이 nums =[6, 10, 8, 9, 3, 5], k =6과 같으면 출력은 5가 됩니다. 마치 하위 목록 [9]를 제거하면 [6, 10, 8, 3, 5] 그리고 6보다 작은 두 개의 숫자[3, 5]와 6보다 큰 두 개의 숫자[10, 8]가 있습니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다.
길이가 n인 막대가 있다고 가정합니다. 또한 각 크기에 대해 다른 크기와 가격이 포함된 목록이 있습니다. 막대를 잘라서 시장에 팔아서 최고가를 찾아야 한다. 낚싯대를 절단한 후 다른 위치에서 절단하고 가격을 비교하여 최상의 가격을 얻으십시오. 따라서 입력이 가격 =[1, 5, 8, 9, 10, 17, 17, 20], n =8인 경우 출력은 막대를 길이 2와 6으로 자르는 것과 같이 22가 됩니다. 이익은 5 + 17 =22입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n+1 크기의 어레이 이익을 정의합니다.
가 됩니다. NULL] 단계를 살펴보겠습니다 - 목록이 비어 있으면 null을 반환합니다. 렌 :=1 tail :=head라는 노드 하나를 만듭니다. 꼬리의 다음이 null이 아닌 동안 len 1 증가 꼬리 :=꼬리의 다음 꼬리의 다음 :=머리 k :=k 모드 렌 newHead :=null for i :=0 ~ len − k 꼬리 :=꼬리의 다음 newHead :=꼬리의 다음 꼬리의 다음 :=null newHead 반환 이해를 돕기 위해 다음
각 요소가 단일 문자로 저장되는 하나의 입력 문자열 문장이 있다고 가정하고 단어별로 문자열을 반대로 해야 합니다. 따라서 입력이 [t,h,e, ,m,a,n, ,i,s, ,와 같은 경우 n,l,c,e]인 경우 출력은 [n,l,c,e, ,i,s, ,m,a,n, ,t,h,e] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 배열 반전 j :=0 n :=s의 크기 initialize i :=0의 경우, i
두 개의 숫자가 문자열로 있다고 가정합니다. 우리는 그것들을 곱하고 결과도 문자열로 반환해야 합니다. 따라서 숫자가 28과 25이면 결과는 700이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 두 개의 인수 x와 y를 취하면 x가 y를 나눈다는 것을 나타냅니다. x <−Infinity이고 y =1이면 무한대를 반환합니다. a :=|x|, b :=|y| 및 답변 :=0 =0 피 :=0 =0 피 :=피 + 1 a :=a − (왼쪽 시프트 b, p번) ans :=ans +
두 개의 문자열 S와 T가 있다고 가정합니다. S가 T의 하위 시퀀스인지 여부를 확인해야 합니다. 따라서 입력이 S =abc, T =adbrcyxd와 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − s가 t와 같으면 - true를 반환 n :=s의 크기, m :=t의 크기 j :=0 initialize i :=0의 경우, i