정수 목록으로 구축할 수 있는 데이터 구조를 개발하고 효율적인 방법으로 필요할 때마다 인덱스 i에서 인덱스 j-1까지 요소의 합을 찾는 함수가 있다고 가정합니다. 두 가지 기능이 있습니다. 정수 배열로 새 인스턴스를 생성하는 생성자입니다. get_sum(i, j)은 시작 인덱스 i와 끝 인덱스 j-1부터 배열 요소의 정수 합계를 반환합니다. 따라서 입력이 array =[5,2,3,6,4,7,8,9,3,2]와 같으면 obj 개체를 구성하고 obj.get_sum(1,5) 및 obj 함수를 호출합니다. get_sum(4,8), 출력
만료 시간으로 구축할 수 있고 사용자 ID와 타임스탬프를 취하는 함수를 지원하는 데이터 구조를 개발한다고 가정합니다. 이것은 주어진 타임 스탬프에 주어진 user_id를 가진 사용자가 요청이 실패했는지 여부를 확인합니다. 사용자가 지정된 만료 시간 이전에 성공적으로 요청한 경우에만 실패합니다. 따라서 입력이 만료 =6과 같으면 개체 obj를 생성하고 obj.limit(0,10), obj.limit(0,16), obj.limit(0,17) 및 obj.limit( 1,20), 그러면 출력은 각각 False, False, True 및
이진 문자열 s가 있다고 가정하고 이제 비트를 선택하고 그 값을 0에서 1로 또는 그 반대로 뒤집는 작업을 고려해 보겠습니다. 3개의 동일한 연속 비트가 없는 문자열을 얻는 데 필요한 최소 연산 수를 찾아야 합니다. 따라서 입력이 s =10011100과 같으면 출력은 1이 됩니다. 인덱스 4에서 비트를 1에서 0으로 바꿔 문자열 10010100을 세 개의 연속적인 동일한 비트가 없도록 할 수 있기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − l :=0, 개수 :=0 l
두 개의 영어 문자열 s와 t가 있다고 가정하고 소문자 및/또는 대문자일 수 있습니다. 하나가 다른 하나의 회전인지 여부를 확인해야 합니다. 따라서 입력이 s =koLKAta t =KAtakoL과 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − s의 크기가 t의 크기와 같지 않으면 거짓을 반환 s :=s 연결 t가 s에 있으면 True, 그렇지 않으면 False를 반환 예시 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − def solve(s, t): if
실행 길이로 인코딩된 소문자 문자열(예:s)로 구성하는 반복자 클래스를 정의하려는 경우 이 반복자를 위한 두 가지 함수가 있습니다. next() 반복자에서 다음 요소를 찾습니다. hasnext() 다음 요소가 있는지 여부를 확인합니다. 따라서 입력이 s =2b1a와 같으면 s로 객체를 구성한 다음 next(), hasnext(), next(), next(), hasnext()를 호출하면 출력은 b가 됩니다. , 참, b, a, 거짓. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 생성자를 정의합니다. 시간이 걸립니다
숫자 n이 있고 좌석을 찾는 n명의 사람들이 있다고 가정하고 1은 이미 점유된 좌석을 나타내고 0은 빈 좌석을 나타내는 비트 목록도 있습니다. 두 사람이 나란히 앉을 수 없기 때문에 n명이 모두 자리를 잡을 수 있는지 확인해야 합니다. 따라서 입력이 n =2 석 =[1, 0, 0, 0, 1, 0, 0]과 같으면 출력은 인덱스 2와 6에 앉을 수 있으므로 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 좌석의 시작 부분에 0을 삽입하고 좌석의 끝에 [0, 1]을 삽입 res :=0, 간격 :=0 좌석에 있
다음 방법을 사용하여 집합 데이터 구조를 구현한다고 가정합니다. - 집합의 새 인스턴스를 생성하는 생성자 집합에 정수 val을 삽입하는 add(val) exists(val) val이 집합에 있는지 여부를 확인합니다. remove(val)를 사용하여 집합에서 val을 제거합니다. 따라서 집합 s를 구성하면 s.add(10), s.add(20), s.add(10), s.exists(10), s.remove(10), s.exists( 10), s.exists(20), 출력은 s.add(10)의 경우 10을 삽입합니다. s.add(
n개의 요소가 있는 nums라는 숫자 목록이 있다고 가정합니다. [1, 2, ..., n] 또는 [n, n - 1, ..., 1]과 같이 증가 또는 감소 방식으로 처음 n개의 자연수로 목록을 만들 수 있는지 여부를 확인해야 합니다. 몇 번이든 오른쪽으로 숫자를 지정합니다. 따라서 입력이 nums =[5,6,1,2,3,4]와 같으면 출력은 True가 됩니다. 왜냐하면 배열을 [1,2,3,4, 5,6] 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=숫자 크기 1에서 n - 1 사이의 i에 대해 다음을 수행합니다. 만약
nums라는 숫자 목록이 있다고 가정합니다. nums에서 가장 빈번한 숫자의 빈도가 k인 경우. 가장 빈번한 항목의 빈도도 k가 되도록 가장 짧은 하위 목록의 길이를 찾아야 합니다. 따라서 입력이 nums =[10, 20, 30, 40, 30, 10]과 같으면 출력은 3이 됩니다. 왜냐하면 여기에서 가장 빈번한 숫자는 10과 30이고 여기서는 k =2이기 때문입니다. sublist [30, 40, 30] 이것은 30이 있고 빈도도 2인 가장 짧은 하위 목록입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − L :=숫자
4개의 가능한 문자 1, 2, 3 및 ?가 있는 문자열이 있다고 가정합니다. ? 대신 1, 2, 3 중 하나를 배치할 수 있습니다. 인접한 두 자리가 같지 않도록 만들 수 있는 가장 작은 수를 찾아야 합니다. 따라서 입력이 s =2??3?과 같으면 출력은 21231이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i :=0 s :=s의 요소 목록 크기가 s <2이면 s[i]가 ?와 같으면 1 반환 i
호출된 번호 목록이 있다고 가정합니다. 이제 i 1인 모든 인덱스 쌍(i, j)을 고려해 보겠습니다. 그런 다음 가장 작은 쌍의 합을 찾습니다. 1 제약 조건을 위반합니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=숫자 크기 min_seen :=nums[0] ans :=inf 2 ~ n - 1 범위의 i에 대해 다음을 수행합니다. ans :=ans 및 (min_seen + nums[i])의 최소값 min_seen :=min_seen 및 nums[i - 1]의 최소값 반환 예시 이해를 돕기 위해 다음
num으로 된 숫자 목록이 있다고 가정합니다. 각 숫자에 대한 이진 표현에 있는 1의 수에 따라 목록을 오름차순으로 정렬해야 합니다. 두 숫자의 1의 개수가 같으면 값에 따라 정렬합니다. 따라서 입력이 nums =[4, 1, 12, 7, 6]과 같으면 출력은 [1, 4, 6, 12, 7]이 됩니다. 왜냐하면 - 4의 이진 형식은 0100입니다. 1의 이진 형식은 0001입니다. 6의 이진 형식은 0110입니다. 12의 이진 형식은 1100입니다. 7의 이진법 형식은 0111입니다. 따라서 배열은 [1, 4, 6, 12, 7]
요소가 오름차순으로 정렬된 nums라는 숫자 목록이 있다고 가정하고 요소를 제곱하고 정렬된 순서로 결과를 반환해야 합니다. 따라서 입력이 nums =[-8, -3, 0, 5, 6]과 같으면 출력은 [0, 9, 25, 36, 64]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=숫자 크기 l :=0 r :=n - 1 색인:=n - 1 res :=숫자와 같은 크기의 목록으로 0으로 채움 =0, do |숫자[r]|, res[인덱스] :=nums[l] * nums[l] l :=l + 1 그렇지 않으면 r
nums라는 숫자 목록이 있다고 가정합니다. 목록이 엄격하게 증가하는 것부터 시작하여 엄격하게 감소한 다음 엄격하게 증가하는 등으로 번갈아 나타나는지 확인해야 합니다. 또한 목록이 엄격하게 증가하는 경우에만 유효합니다. 따라서 입력이 nums =[2, 4, 8, 7, 5, 1, 5, 7, 2, 1]과 같으면 출력은 [2,4,8]이 증가하기 때문에 True가 됩니다. [7,5,1]이 감소하고 있다가 다시 [5,7]이 증가하고 [2,1]이 감소합니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − nums[1] <=nums[
두 개의 문자열 s와 t가 있다고 가정합니다. 우리는 t를 형성하고 싶지만, 키보드에 몇몇 문자가 붙어서 1번 이상 쓸 수 있는 문제가 있습니다. 입력한 s가 t를 쓰기 위한 것인지 아닌지 확인해야 합니다. 따라서 입력이 s =apppplee t =apple과 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i :=0, j :=0 s_len :=s의 크기 t_len :=t의 크기 t_last :=빈 문자열 j
숫자 n이 있다고 가정하고 처음 n개의 양의 홀수 정수의 합을 찾아야 합니다. 따라서 입력이 n =10과 같으면 처음 10개의 홀수 정수가 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]이고 그 합이 다음과 같기 때문에 출력은 100이 됩니다. 100. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 처음 n개의 홀수에 대해 합은 항상 n의 제곱입니다. 결과를 얻으려면 n*n을 반환합니다. 예시 이해를 돕기 위해 다음 구현을 살펴보겠습니다. − def solve(n): return n*n n = 1
두 가지 방법이 있는 데이터 구조를 만들고 싶다고 가정해 봅시다 - add(val) 데이터 구조에 val 값을 추가합니다. find(val) 합이 val인지 아닌지를 확인하는 두 개의 요소 결과를 즉석에서 얻을 수 있도록 이것을 설계해야 합니다. 문의가 올 때마다 번호를 검색하지 않습니다. 따라서 입력이 obj 객체를 만들고 6, 14, 3, 8, 11, 15 몇 개의 숫자를 추가하는 것과 같으면 obj.find(9), obj.find(11), obj.find(15)와 같이 검사합니다. 9는 6+3으로 구성할 수 있고 11은
nums라는 숫자 목록이 있고 목표 값도 있다고 가정하면 합이 최대(target-1)인 nums에서 가장 큰 숫자 쌍의 합을 찾아야 합니다. 따라서 입력이 nums =[8, 3, 4, 9, 2] target =8과 같으면 8보다 작은 숫자의 가장 큰 쌍의 합이 4 + 3 =7이기 때문에 출력은 7이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 목록 번호 정렬 p1 :=0 p2 :=숫자 크기 - 1 m :=-inf p1
nums라는 숫자 목록이 있고 nums의 요소가 오름차순으로 정렬되어 있다고 가정합니다. 또 다른 값 k가 있습니다. 목록에서 가져온 두 요소의 합이 k가 되는지 여부를 확인해야 합니다. 숫자는 음수 또는 0일 수도 있습니다. 이 문제는 일정한 공간 사용량으로 해결해야 합니다. 따라서 입력이 nums =[-8, -3, 2, 7, 9] k =4와 같으면 출력은 True가 됩니다. 왜냐하면 7과 -3을 취하면 합계는 7 + (- 3) =4, k와 동일합니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − i :=0 j :=숫
길이가 같은 두 개의 소문자 문자열 s와 t가 있다고 가정합니다. 우리는 s에서 한 문자를 선택하고 t에서 다른 문자를 선택하고 바꿀 수 있습니다. 원하는 횟수만큼 이 작업을 수행할 수 있습니다. 마지막으로 두 문자열을 동일하게 만들 수 있는지 여부를 확인해야 합니다. 따라서 입력이 s =abcd t =cdab과 같으면 출력은 True가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − fre :=s와 t의 연결된 문자열에 존재하는 각 요소의 빈도를 포함하는 목록 fre, do의 모든 값 목록에 있는 각 cnt에 대