시스템 설계 면접 질문 너무 개방적이어서 올바른 준비 방법을 알기가 너무 어렵습니다. 이제 구매 후 Amazon, Microsoft 및 Adobe의 디자인 라운드를 해독할 수 있습니다. 이 책은. 매일 수정 하나 디자인 질문 그리고 나는 당신이 디자인 라운드를 깨뜨릴 수 있다고 약속합니다.
이 문제에서 우리는 정렬 양의 정수. 숫자가 짝수 인 숫자의 개수를 찾아야합니다.
차례
예
Array = {123 , 34 , 3434 , 121 , 100}
2
설명: 34와 3434 만 숫자가 짝수 인 정수입니다. 그래서 우리는 2를 인쇄합니다.
Array = {1 , 111 , 11111 , 12345}
0
설명: 주어진 배열에 짝수의 자릿수를 가진 정수가 없습니다.
접근
이 문제의 핵심은 정수의 자릿수를 세는 것입니다. 그렇게 할 수 있다면 배열의 모든 정수에 대해 프로세스를 반복하고 짝수 자릿수를 가진 정수의 수를 계산할 수 있습니다. 이진 표현에서는 주어진 정수를 오른쪽으로 이동 (또는 2로 나눈 값)하여 숫자를 계산하기 위해 XNUMX이 될 때까지 비트 그것에. 마찬가지로 숫자를 세는 경우 정수를 다음으로 계속 나눌 수 있습니다. 10 그것이되지 않는 한 0. 이 방법은 모든 염기에 적용됩니다.
암호알고리즘
- 함수를 만듭니다. findNumbers () 전달 된 배열에서 자릿수가 짝수 인 정수의 개수를 찾습니다.
- 또한 도우미 함수를 만듭니다. numberOfDigits () 다음과 같이 전달 된 정수의 자릿수를 반환합니다.
- 초기화 CNT = 0
- 정수인 동안 n은 0보다 큽니다.
- 증가 CNT, cnt ++
- 나누다 n by 10, n / = 10
- 반환 CNT
- 초기화 결과 = 0은 숫자가 짝수 인 정수의 개수를 저장합니다.
- 배열의 모든 요소에 대해 :
- 우리는 사용하여 자릿수를 검색합니다. numberOfDigits () 기능
- 얻은 자릿수가 짝수 인 경우 :
- 증가 결과, 결과 ++
- 반환 결과
짝수 자리수 Leetcode 솔루션으로 숫자 찾기 구현
C ++ 프로그램
#include <bits/stdc++.h> using namespace std; int numberOfDigits(int n) { int cnt = 0; while(n > 0) { n /= 10; cnt++; } return cnt; } int findNumbers(vector <int> &a) { int result = 0; for(int &i : a) if(numberOfDigits(i) % 2 == 0) result++; return result; } int main() { vector <int> a = {123 , 34 , 3434 , 121 , 100}; cout << findNumbers(a) << '\n'; return 0; }
자바 프로그램
class find_numbers { public static void main(String args[]) { int[] a = {123 , 34 , 3434 , 121 , 100}; System.out.println(findNumbers(a)); } static int numberOfDigits(int n) { int cnt = 0; while(n > 0) { n /= 10; cnt++; } return cnt; } static int findNumbers(int[] a) { int result = 0; for(int i = 0 ; i < a.length ; i++) if(numberOfDigits(a[i]) % 2 == 0) result++; return result; } }
2
짝수 자리수 Leetcode 솔루션으로 찾기 번호의 복잡성 분석
시간 복잡성
시간 복잡성은 의 위에) 여기서 N = 배열의 단일 패스를 수행 할 때 배열의 크기이며 자릿수는 일정한 시간에 검색됩니다.
공간 복잡성
O (1) 일정한 메모리 공간 만 사용하기 때문입니다.
