题目
考勤信息
给定一个包含员工考勤信息的字符串数组 attendance,每个字符串代表一天的考勤记录。字符串中的每个字符代表一个员工的考勤状态,字符含义如下:
- 'A':出勤
- 'L':请假
- 'P':迟到
- 'O':其他(如旷工、休息日等)
数组的第 i 个字符串表示第 i 天的考勤记录,字符串的第 j 个字符表示第 j 个员工的考勤状态。你需要计算每个员工在指定天数内的出勤天数、请假天数、迟到天数以及其他天数。
输入
- attendance:一个字符串数组,每个字符串代表一天的考勤记录。
- num_days:整数,表示记录的天数。
- num_employees:整数,表示员工的数量。
输出
返回一个二维数组 result,其中 result[i] 是一个长度为 4 的数组,表示第 i 个员工的考勤统计结果,顺序为 [出勤天数, 请假天数, 迟到天数, 其他天数]。
示例
输入:
attendance = ["AAPO", "LAAP", "AAAL"]
num_days = 3
num_employees = 4
输出:
[[2, 0, 1, 0], [0, 1, 2, 0], [3, 0, 0, 0], [0, 0, 0, 3]]
解释:
- 第 0 个员工:出勤 2 天,请假 0 天,迟到 1 天,其他 0 天。
- 第 1 个员工:出勤 0 天,请假 1 天,迟到 2 天,其他 0 天。
- 第 2 个员工:出勤 3 天,请假 0 天,迟到 0 天,其他 0 天。
- 第 3 个员工:出勤 0 天,请假 0 天,迟到 0 天,其他 3 天。
思路
- 创建一个二维数组 result,大小为 num_employees x 4,用于存储每个员工的考勤统计结果。
- 遍历每一天的考勤记录:
- 遍历每个员工的考勤状态:
- 根据考勤状态更新对应员工的考勤统计结果。
- 遍历每个员工的考勤状态:
- 返回 result 数组。
Java 编码解析
import java.util.Arrays;
public class AttendanceStatistics {
public int[][] calculateAttendance(String[] attendance, int num_days, int num_employees) {
int[][] result = new int[num_employees][4];
for (int day = 0; day < num_days; day++) {
String record = attendance[day];
for (int emp = 0; emp < num_employees; emp++) {
char status = record.charAt(emp);
switch (status) {
case 'A':
result[emp][0]++;
break;
case 'L':
result[emp][1]++;
break;
case 'P':
result[emp][2]++;
break;
case 'O':
result[emp][3]++;
break;
}
}
}
return result;
}
public static void main(String[] args) {
AttendanceStatistics solution = new AttendanceStatistics();
String[] attendance = {"AAPO", "LAAP", "AAAL"};
int num_days = 3;
int num_employees = 4;
int[][] result = solution.calculateAttendance(attendance, num_days, num_employees);
for (int[] row : result) {
System.out.println(Arrays.toString(row));
}
}
}
C++ 编码解析
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> calculateAttendance(vector<string>& attendance, int num_days, int num_employees) {
vector<vector<int>> result(num_employees, vector<int>(4, 0));
for (int day = 0; day < num_days; day++) {
string record = attendance[day];
for (int emp = 0; emp < num_employees; emp++) {
char status = record[emp];
switch (status) {
case 'A':
result[emp][0]++;
break;
case 'L':
result[emp][1]++;
break;
case 'P':
result[emp][2]++;
break;
case 'O':
result[emp][3]++;
break;
}
}
}
return result;
}
int main() {
vector<string> attendance = {"AAPO", "LAAP", "AAAL"};
int num_days = 3;
int num_employees = 4;
vector<vector<int>> result = calculateAttendance(attendance, num_days, num_employees);
for (const auto& row : result) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
return 0;
}
Python 编码解析
def calculate_attendance(attendance, num_days, num_employees):
result = [[0, 0, 0, 0] for _ in range(num_employees)]
for day in range(num_days):
record = attendance[day]
for emp in range(num_employees):
status = record[emp]
if status == 'A':
result[emp][0] += 1
elif status == 'L':
result[emp][1] += 1
elif status == 'P':
result[emp][2] += 1
elif status == 'O':
result[emp][3] += 1
return result
if __name__ == "__main__":
attendance = ["AAPO", "LAAP", "AAAL"]
num_days = 3
num_employees = 4
result = calculate_attendance(attendance, num_days, num_employees)
for row in result:
print(row)