시스템 설계 면접 질문 너무 개방적이어서 올바른 준비 방법을 알기가 너무 어렵습니다. 이제 구매 후 Amazon, Microsoft 및 Adobe의 디자인 라운드를 해독할 수 있습니다. 이 책은. 매일 수정 하나 디자인 질문 그리고 나는 당신이 디자인 라운드를 깨뜨릴 수 있다고 약속합니다.
당신은 주어진 정렬 정수 문제 설명은 배열에있는 가장 빈번한 요소를 찾아야한다고 말합니다. 최대 횟수만큼 발생하는 값이 여러 개 있으면 그중 하나를 인쇄해야합니다.
차례
예
입력
[1, 4,5,3,1,4,16]
산출
가장 빈번한 요소는 다음과 같습니다. 1
설명
여기서 1은 3 회 (배열에서 가장 빈번한 요소)
입력
[23,12,12,34,23,23]
산출
가장 빈번한 요소는 다음과 같습니다. 23
설명
여기서 23은 3 회 (배열에서 가장 빈번한 요소)
암호알고리즘
- 지도를 선언하십시오.
- 배열의 각 요소의 빈도를 계산하고 맵에 저장합니다.
- maxCount를 0으로 설정하고 결과를 Integer의 최소값으로 설정합니다.
- 지도를 가로 질러 다음을 확인합니다.
- maxCount 인 경우
- 결과를 해당 배열 요소로 설정
- maxCount를 해당 요소의 빈도로 설정
- maxCount 인 경우
배열에서 가장 빈번한 요소에 대한 설명
여기에 주어진 질문은 배열에 존재하는 가장 빈번한 요소를 찾는 것입니다. 또한 최대 횟수만큼 발생하는 값이 여러 개있는 경우 해당 값을 자유롭게 인쇄 할 수 있습니다. 코드는 키와 값을 요소로 가질지도를 순회하고이 조건이 발생하면 빈도를 표시합니다. 그러면 첫 번째 최대 빈도를 인쇄합니다. 인수를 배열과 배열의 길이로받는 함수 getMostFrequent를 정의합니다. 여기서 첫 번째는 배열을 탐색하고 각 배열 요소의 빈도를 저장 및 계산하고 각 배열 요소의 빈도를 계속 증가시키는 것입니다.
이를 위해 maxCount와 result라는 두 가지 값을 사용합니다. maxCount 값을 0으로 초기화하고 결과는 Integer의 최소값이됩니다. 맵을 횡단하여 maxCount가 요소의 빈도보다 작은 지 확인하고, true이면 maxCount의 값을 요소의 빈도로 설정하고 해당 요소에 대한 결과를 설정합니다.
예를 들어 보겠습니다.
예
arr = {2, 5, 2, 3, 3, 2, 1}
우리는 배열을 횡단하고, 각 요소의 빈도를 계산하고 저장할 것이며, 횡단 후에 우리는 이와 같은지도를 갖게 될 것입니다.
myMap={1:1, 2:3, 3:2, 5:1}
지도를 탐색하고 각 요소를 가져 와서 maxCount보다 크면 빈도를 확인합니다.
maxCount = 0, 결과 = Integer.MIN_VALUE
- 값 = 1, 빈도 = 1
maxCount <value.second가 true이면 maxCount 값과 결과를 업데이트합니다.
결과 = value.first, maxCount = value.second;
결과 = 1, maxCount = 1
- 값 = 2, 빈도 = 3
maxCount <value.second가 true이면 maxCount 값과 결과를 업데이트합니다.
결과 = value.first, maxCount = value.second;
결과 = 2, maxCount = 3
- value = 3 frequcny = 2
maxCount <value.second가 false이면 아무 작업도 수행하지 않습니다.
- value = 5 frequcny = 1
maxCount <value.second가 false 인 경우.
map의 모든 값을 탐색했으며 결과에 필요한 출력이 있으며 결과를 반환합니다.
결과 = 2
실시
배열에서 가장 자주 사용되는 요소에 대한 C ++ 프로그램
#include <bits/stdc++.h> using namespace std; int getMostFrequent(int arr[], int n) { unordered_map<int, int> myMap; for (int i = 0; i < n; i++) myMap[arr[i]]++; int maxCount = 0, result = INT_MIN; for (auto value : myMap) { if (maxCount < value.second) { result = value.first; maxCount = value.second; } } return result; } int main() { int arr[] = { 2, 5, 2, 3, 3, 2, 1 }; int n = sizeof(arr)/sizeof(arr[0]); cout << getMostFrequent(arr, n); return 0; }
2
배열에서 가장 자주 사용되는 요소를위한 Java 프로그램
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; class mostFrequentElement { public static int getMostFrequent(int arr[], int n) { Map<Integer, Integer> myMap =new HashMap<Integer, Integer>(); for(int i = 0; i < n; i++) { if(myMap.containsKey(arr[i])) { myMap.put(arr[i], myMap.get(arr[i])+1); } else { myMap.put(arr[i], 1); } } int maxCount = 0, result= Integer.MIN_VALUE ; for(Entry<Integer, Integer> val : myMap.entrySet()) { if (maxCount < val.getValue()) { result = val.getKey(); maxCount = val.getValue(); } } return result; } public static void main (String[] args) { int arr[] = { 2, 5, 2, 3, 3, 2, 1 }; int n = arr.length; System.out.println(getMostFrequent(arr, n)); } }
2
배열에서 가장 빈번한 요소에 대한 복잡성 분석
시간 복잡성
O (N) 어디에 "엔" 배열의 요소 수입니다.
공간 복잡성
O (N) 어디에 "엔" 배열의 요소 수입니다.
