comments | difficulty | edit_url | rating | source | tags | |
---|---|---|---|---|---|---|
true |
简单 |
1266 |
第 314 场周赛 Q1 |
|
共有 n
位员工,每位员工都有一个从 0
到 n - 1
的唯一 id 。
给你一个二维整数数组 logs
,其中 logs[i] = [idi, leaveTimei]
:
idi
是处理第i
个任务的员工的 id ,且leaveTimei
是员工完成第i
个任务的时刻。所有leaveTimei
的值都是 唯一 的。
注意,第 i
个任务在第 (i - 1)
个任务结束后立即开始,且第 0
个任务从时刻 0
开始。
返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足,则返回几人中 最小 的 id 。
示例 1:
输入:n = 10, logs = [[0,3],[2,5],[0,9],[1,15]] 输出:1 解释: 任务 0 于时刻 0 开始,且在时刻 3 结束,共计 3 个单位时间。 任务 1 于时刻 3 开始,且在时刻 5 结束,共计 2 个单位时间。 任务 2 于时刻 5 开始,且在时刻 9 结束,共计 4 个单位时间。 任务 3 于时刻 9 开始,且在时刻 15 结束,共计 6 个单位时间。 时间最长的任务是任务 3 ,而 id 为 1 的员工是处理此任务的员工,所以返回 1 。
示例 2:
输入:n = 26, logs = [[1,1],[3,7],[2,12],[7,17]] 输出:3 解释: 任务 0 于时刻 0 开始,且在时刻 1 结束,共计 1 个单位时间。 任务 1 于时刻 1 开始,且在时刻 7 结束,共计 6 个单位时间。 任务 2 于时刻 7 开始,且在时刻 12 结束,共计 5 个单位时间。 任务 3 于时刻 12 开始,且在时刻 17 结束,共计 5 个单位时间。 时间最长的任务是任务 1 ,而 id 为 3 的员工是处理此任务的员工,所以返回 3 。
示例 3:
输入:n = 2, logs = [[0,10],[1,20]] 输出:0 解释: 任务 0 于时刻 0 开始,且在时刻 10 结束,共计 10 个单位时间。 任务 1 于时刻 10 开始,且在时刻 20 结束,共计 10 个单位时间。 时间最长的任务是任务 0 和 1 ,处理这两个任务的员工的 id 分别是 0 和 1 ,所以返回最小的 0 。
提示:
2 <= n <= 500
1 <= logs.length <= 500
logs[i].length == 2
0 <= idi <= n - 1
1 <= leaveTimei <= 500
idi != idi + 1
leaveTimei
按严格递增顺序排列
我们用变量
接下来,遍历数组
最后返回答案
时间复杂度
class Solution:
def hardestWorker(self, n: int, logs: List[List[int]]) -> int:
last = mx = ans = 0
for uid, t in logs:
t -= last
if mx < t or (mx == t and ans > uid):
ans, mx = uid, t
last += t
return ans
class Solution {
public int hardestWorker(int n, int[][] logs) {
int ans = 0;
int last = 0, mx = 0;
for (int[] log : logs) {
int uid = log[0], t = log[1];
t -= last;
if (mx < t || (mx == t && ans > uid)) {
ans = uid;
mx = t;
}
last += t;
}
return ans;
}
}
class Solution {
public:
int hardestWorker(int n, vector<vector<int>>& logs) {
int ans = 0, mx = 0, last = 0;
for (auto& log : logs) {
int uid = log[0], t = log[1];
t -= last;
if (mx < t || (mx == t && ans > uid)) {
mx = t;
ans = uid;
}
last += t;
}
return ans;
}
};
func hardestWorker(n int, logs [][]int) (ans int) {
var mx, last int
for _, log := range logs {
uid, t := log[0], log[1]
t -= last
if mx < t || (mx == t && uid < ans) {
mx = t
ans = uid
}
last += t
}
return
}
function hardestWorker(n: number, logs: number[][]): number {
let [ans, mx, last] = [0, 0, 0];
for (let [uid, t] of logs) {
t -= last;
if (mx < t || (mx == t && ans > uid)) {
ans = uid;
mx = t;
}
last += t;
}
return ans;
}
impl Solution {
pub fn hardest_worker(n: i32, logs: Vec<Vec<i32>>) -> i32 {
let mut res = 0;
let mut max = 0;
let mut pre = 0;
for log in logs.iter() {
let t = log[1] - pre;
if t > max || (t == max && res > log[0]) {
res = log[0];
max = t;
}
pre = log[1];
}
res
}
}
#define min(a, b) (((a) < (b)) ? (a) : (b))
int hardestWorker(int n, int** logs, int logsSize, int* logsColSize) {
int res = 0;
int max = 0;
int pre = 0;
for (int i = 0; i < logsSize; i++) {
int t = logs[i][1] - pre;
if (t > max || (t == max && res > logs[i][0])) {
res = logs[i][0];
max = t;
}
pre = logs[i][1];
}
return res;
}
impl Solution {
pub fn hardest_worker(n: i32, logs: Vec<Vec<i32>>) -> i32 {
let mut ans = 0;
let mut mx = 0;
let mut last = 0;
for log in logs {
let uid = log[0];
let t = log[1];
let diff = t - last;
last = t;
if diff > mx || (diff == mx && uid < ans) {
ans = uid;
mx = diff;
}
}
ans
}
}