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) | 只使用了常数级别的额外空间存储计数器 |