Function to Compute the Average Salary Excluding the Minimum and
- 时间:2020-09-07 13:13:13
- 分类:网络文摘
- 阅读:106 次
Given an array of unique integers salary where salary[i] is the salary of the employee i. Return the average salary of employees excluding the minimum and maximum salary.
Example 1:
Input: salary = [4000,3000,1000,2000]
Output: 2500.00000
Explanation: Minimum salary and maximum salary are 1000 and 4000 respectively.
Average salary excluding minimum and maximum salary is (2000+3000)/2= 2500Example 2:
Input: salary = [1000,2000,3000]
Output: 2000.00000
Explanation: Minimum salary and maximum salary are 1000 and 3000 respectively.
Average salary excluding minimum and maximum salary is (2000)/1= 2000Example 3:
Input: salary = [6000,5000,4000,3000,2000,1000]
Output: 3500.00000Example 4:
Input: salary = [8000,9000,2000,3000,6000,1000]
Output: 4750.00000Constraints:
3 <= salary.length <= 100
10^3 <= salary[i] <= 10^6
salary[i] is unique.
Answers within 10^-5 of the actual value will be accepted as correct.Hint:
Get the total sum and subtract the minimum and maximum value in the array. Finally divide the result by n – 2.
Modern C++ Function to compute the Average Excluding the Minimum and Maximum
The traditional implementation is usually based on a loop, that will store the maximum, minimum, and the sum of the array. But in modern C++, you don’t need to do a loop. Instead, you can accomplish these tasks using min_element, max_element, and the std::accumulate function.
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public: double average(vector<int>& salary) { double m1 = *min_element(begin(salary), end(salary)); double m2 = *max_element(begin(salary), end(salary)); double sum = std::accumulate(begin(salary), end(salary), 0, [](auto &a, auto &b) { return a + b; }); return (sum - m1 - m2) / (salary.size() - 2); } }; |
class Solution { public: double average(vector<int>& salary) { double m1 = *min_element(begin(salary), end(salary)); double m2 = *max_element(begin(salary), end(salary)); double sum = std::accumulate(begin(salary), end(salary), 0, [](auto &a, auto &b) { return a + b; }); return (sum - m1 - m2) / (salary.size() - 2); } };
Even better, you can use the minmax_element to retrive the min and max value with one pass:
1 2 3 4 5 6 7 8 9 10 | class Solution { public: double average(vector<int>& salary) { auto x = minmax_element(begin(salary), end(salary)); double sum = std::accumulate(begin(salary), end(salary), 0, [](auto &a, auto &b) { return a + b; }); return (sum - *x.first - *x.second) / (salary.size() - 2); } }; |
class Solution { public: double average(vector<int>& salary) { auto x = minmax_element(begin(salary), end(salary)); double sum = std::accumulate(begin(salary), end(salary), 0, [](auto &a, auto &b) { return a + b; }); return (sum - *x.first - *x.second) / (salary.size() - 2); } };
Python Function to Compute the Average Excluding the Minimum and Maximum
In Python, the code is concise:
1 2 3 4 5 | class Solution: def average(self, salary: List[int]) -> float: m1 = min(salary) m2 = max(salary) return (sum(salary) - m1 - m2) / (len(salary) - 2) |
class Solution: def average(self, salary: List[int]) -> float: m1 = min(salary) m2 = max(salary) return (sum(salary) - m1 - m2) / (len(salary) - 2)
All above implementations have complexity at O(N) time and O(1) space.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:家庭——人生的第一堂课 老师,我心里的一盏明灯 明月山作文 烛光 不同的角度不同的结果 国庆节的烦恼作文 美丽的嵩山作文 过早的爱情 让思维转个弯作文 三八妇女节的惊喜作文
- 评论列表
-
- 添加评论