Function to Compute the Average Salary Excluding the Minimum and

  • 时间:2020-09-07 13:13:13
  • 分类:网络文摘
  • 阅读:171 次

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= 2500

Example 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= 2000

Example 3:
Input: salary = [6000,5000,4000,3000,2000,1000]
Output: 3500.00000

Example 4:
Input: salary = [8000,9000,2000,3000,6000,1000]
Output: 4750.00000

Constraints:
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) —

推荐阅读:
Bruteforce/BackTracking Algorithm to Split Array into Fibonacci   How to Avoid Paying Too Much Fee when Cashing out Bitcoin via Wi  The Common Kodi Errors and Use of Free VPN for Linux  Java Pattern: Use Atomic Boolean to Return Single Usage Object  Significance of HTML and CSS in Mobile App Development  How to Reverse Words in a String using Modern Programming Langua  The Python Function to Retrieve the Producer Reward for Witness  Function to Compute the Average Salary Excluding the Minimum and  Efficient Algorithms to Compute The kth Factor of a Natural Numb  Can We Make Arithmetic Progression From Sequence of Numbers? 
评论列表
添加评论