Easy

题目描述

公司里有 n 名员工,编号从 0 到 n - 1。每个员工 i 在公司工作了 hours[i] 小时。

公司要求每个员工至少工作 target 小时。

给你一个长度为 n 的非负整数数组 hours 和一个非负整数 target。

返回工作至少 target 小时的员工数量。

示例 1:

输入:hours = [0,1,2,3,4], target = 2
输出:3
解释:公司要求每个员工至少工作 2 小时。
- 员工 0 工作了 0 小时,未达到目标。
- 员工 1 工作了 1 小时,未达到目标。
- 员工 2 工作了 2 小时,达到了目标。
- 员工 3 工作了 3 小时,达到了目标。
- 员工 4 工作了 4 小时,达到了目标。
有 3 名员工达到了目标。

示例 2:

输入:hours = [5,1,4,2,2], target = 6
输出:0
解释:公司要求每个员工至少工作 6 小时。
没有员工达到目标。

提示:

  • 1 <= n == hours.length <= 50
  • 0 <= hours[i], target <= 10^5

解题思路

这是一道简单的数组遍历统计问题。

思路分析:

题目要求统计工作时长至少达到目标值的员工数量,这是一个典型的计数问题。

解法一:直接遍历统计(推荐)

  • 遍历整个 hours 数组
  • 对于每个员工的工作时长,检查是否大于等于 target
  • 如果满足条件,计数器加一
  • 最后返回计数结果

解法二:使用内置函数

  • 在某些语言中可以使用 filter、count 等函数式编程方法
  • 本质上和遍历相同,但代码更简洁

这道题的核心就是简单的条件判断和计数,时间复杂度是线性的,空间复杂度是常数级的。由于数据规模较小(最多50个员工),任何合理的解法都能通过。

推荐使用直接遍历的方法,因为它最直观、效率高且易于理解。

代码实现

class Solution {
public:
    int numberOfEmployeesWhoMetTarget(vector<int>& hours, int target) {
        int count = 0;
        for (int hour : hours) {
            if (hour >= target) {
                count++;
            }
        }
        return count;
    }
};
class Solution:
    def numberOfEmployeesWhoMetTarget(self, hours: List[int], target: int) -> int:
        count = 0
        for hour in hours:
            if hour >= target:
                count += 1
        return count
public class Solution {
    public int NumberOfEmployeesWhoMetTarget(int[] hours, int target) {
        int count = 0;
        foreach (int hour in hours) {
            if (hour >= target) {
                count++;
            }
        }
        return count;
    }
}
var numberOfEmployeesWhoMetTarget = function(hours, target) {
    let count = 0;
    for (let hour of hours) {
        if (hour >= target) {
            count++;
        }
    }
    return count;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历整个 hours 数组一次,n 为数组长度
空间复杂度O(1)只使用了常数级别的额外空间存储计数器

相关题目