一个开发团队有若干人, 团队成员来自五湖四海,其中有一个同事来自同一个地方,我们随机采访部分同事,受采访者告诉你有多少同事和他来自同一个地方,根据受访者的回答计算出团队的最小人数;

    例:
    输入: array = [0,0,1,1,1,2,2]
    输出: 9

    输入: array = [0,0,1,1,0]
    输出: 5

    输入: array = [6,6,6,6]
    输出: 7

    根据要求完成编码,提供getMinNumber(array),函数,要求考虑编码的可读性、性能.

    解答:
    析:以[1,1,1,1,5] 5 + 5 = 10为例
    因为有4个人回答的1,那么最起码有5个人。

    1. function getMinNumber(array) {
    2. //统计map
    3. let map = new Map();
    4. //统计元素个数
    5. array.forEach((item, index, array) => {
    6. if (map.has(item)) {
    7. map.set(item, map.get(item) + 1);
    8. return true;
    9. }
    10. map.set(item, 1);
    11. });
    12. //最小人数
    13. let totalMin = 0;
    14. map.forEach((value, key, map) => {
    15. //回答当前数字的最小人数
    16. let currentMin;
    17. //当前数字同组最小人数
    18. let groupMin = key + 1;
    19. if (value > groupMin) {
    20. if (value % groupMin == 0) {
    21. currentMin = value;
    22. } else {
    23. currentMin = value - (value % groupMin) + groupMin;
    24. }
    25. } else {
    26. currentMin = groupMin;
    27. }
    28. totalMin += currentMin;
    29. });
    30. return totalMin;
    31. }