力扣2432题
题目描述:
共有 n 位员工,每位员工都有一个从 0 到 n - 1 的唯一 id 。
给你一个二维整数数组 logs ,其中 logs[i] = [idi, leaveTimei] :
idi 是处理第 i 个任务的员工的 id ,且
leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei 的值都是 唯一 的。
注意,第 i 个任务在第 (i - 1) 个任务结束后立即开始,且第 0 个任务从时刻 0 开始。返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足,则返回几人中 最小 的 id 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/the-employee-that-worked-on-the-longest-task
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路:
题目很简单,可以通过一个辅助的一维数组useTime[],长度和logs的列相同,useTime[i]表示logs[i][0]个人完成任务所需时间,找最大的即可。
注意点:当useTime和maxTime相等的时候,需要进一步比较id的大小。
class Solution {
public int hardestWorker(int n, int[][] logs) {
int m = logs.length;//用于记录每个员工处理任务用的时长
int[] useTime = new int[m];
int maxTime = 0;
int maxTimeIndex = 0;
for(int i=0; i<m;i++){
if(i==0){
useTime[i] = logs[i][1];
}else{
useTime[i] = logs[i][1] - logs[i-1][1];
}
//比较时间
if(useTime[i] > maxTime || (useTime[i] == maxTime && logs[i][0] < logs[maxTimeIndex][0])){
//选择 id 小的
maxTime = useTime[i];
maxTimeIndex = i;
}
}
return logs[maxTimeIndex][0];
}
}