LeetCode2432

力扣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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1683293331702.png

题解思路:

题目很简单,可以通过一个辅助的一维数组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];
    }
}

猜你喜欢

转载自blog.csdn.net/Miss_croal/article/details/130515818