시스템 설계 면접 질문 너무 개방적이어서 올바른 준비 방법을 알기가 너무 어렵습니다. 이제 구매 후 Amazon, Microsoft 및 Adobe의 디자인 라운드를 해독할 수 있습니다. 이 책은. 매일 수정 하나 디자인 질문 그리고 나는 당신이 디자인 라운드를 깨뜨릴 수 있다고 약속합니다.
차례
문제 설명
문제에서” 평균 최소 및 최대 급여를 제외한 급여”급여 배열이 제공됩니다. 여기서 배열의 각 요소는 서로 다른 직원의 급여를 나타냅니다. 배열의 각 값은 고유합니다.
우리의 임무는 최소 및 최대 급여를 제외한 직원의 평균 급여를 계산하는 것입니다.
예
Salary= [8000,9000,2000,3000,6000,1000]
4750.0
설명 :
주어진 급여 배열에서 9000은 최대 급여이고 1000은 최소 급여입니다. 우리는 제외하고 평균 급여를 찾아야하므로 최소 및 최대 이 값을 총 합계에 더하지 않습니다. 총합은 19000이므로 평균은 19000/4, 즉 4750입니다.
접근
이것은 기본적인 수학 문제입니다. 우리의 임무는 최소 및 최대 급여를 찾은 다음 나머지 급여의 평균을 찾는 것입니다. 다음 단계를 따릅니다.
- 최소 급여는 INT_MAX로, 최대 급여는 INT_MIN으로 초기화하십시오. 변수를 사용하여 급여 합계를 저장하므로 0으로 초기화합니다.
- 배열을 탐색하고 각 급여를 합계에 추가합니다. 한편, 최소 급여 및 최대 급여 값도 업데이트하십시오.
- n의 값이 2보다 작 으면 평균 급여는 XNUMX이되고 평균 급여는 (총 급여-최소 급여-최대 급여) / (n-XNUMX)가됩니다.
- 평균 급여가 두 배가 될 수 있으므로 (n-2)에 1.0을 곱합니다.
최소 및 최대 급여 Leetcode 솔루션을 제외한 평균 급여 코드
C ++ 코드
#include <bits/stdc++.h> using namespace std; double average(vector<int>& salary) { int n=salary.size(); int mn=INT_MAX,mx=INT_MIN,sum=0; for(int i=0;i<n;i++) { sum=sum+salary[i]; mn=min(mn,salary[i]); mx=max(mx,salary[i]); } double ans=(sum-mn-mx)/((n-2)*1.0); if(n>2) return ans; else return 0; } int main() { vector<int> arr = {8000,9000,2000,3000,6000,1000}; cout<<average(arr)<<endl; return 0; }
4750.0
자바 코드
import java.util.Arrays; public class Tutorialcup { public static double average(int[] salary) { int n=salary.length; int mn=Integer.MAX_VALUE,mx=Integer.MIN_VALUE,sum=0; for(int i=0;i<n;i++) { sum=sum+salary[i]; mn=Math.min(mn,salary[i]); mx=Math.max(mx,salary[i]); } double ans=(sum-mn-mx)/((n-2)*1.0); if(n>2) return ans; else return 0; } public static void main(String[] args) { int [] arr = {8000,9000,2000,3000,6000,1000}; double ans= average(arr); System.out.println(ans); } }
4750.0
최소 및 최대 급여 Leetcode 솔루션을 제외한 평균 급여의 복잡성 분석
시간 복잡성
위 코드의 시간 복잡성은 O (N) 급여 배열을 한 번만 탐색하기 때문입니다. 여기서 n은 급여 배열의 길이입니다.
공간 복잡성
위 코드의 공간 복잡성은 다음과 같습니다. O (1) 답을 저장하는 데 변수 만 사용하고 있기 때문입니다.
