1.題目
共有 n 位員工,每位員工都有一個(gè)從 0 到 n - 1 的唯一 id 窑多。
給你一個(gè)二維整數(shù)數(shù)組 logs 千所,其中 logs[i] = [idi, leaveTimei] :
idi 是處理第 i 個(gè)任務(wù)的員工的 id 藏姐,且
leaveTimei 是員工完成第 i 個(gè)任務(wù)的時(shí)刻洞斯。所有 leaveTimei 的值都是 唯一 的充边。
注意脉执,第 i 個(gè)任務(wù)在第 (i - 1) 個(gè)任務(wù)結(jié)束后立即開始姻锁,且第 0 個(gè)任務(wù)從時(shí)刻 0 開始嫩痰。
返回處理用時(shí)最長的那個(gè)任務(wù)的員工的 id 睹限。如果存在兩個(gè)或多個(gè)員工同時(shí)滿足铲掐,則返回幾人中 最小 的 id 拾弃。
示例 1:
輸入:n = 10, logs = [[0,3],[2,5],[0,9],[1,15]]
輸出:1
解釋:
任務(wù) 0 于時(shí)刻 0 開始,且在時(shí)刻 3 結(jié)束摆霉,共計(jì) 3 個(gè)單位時(shí)間豪椿。
任務(wù) 1 于時(shí)刻 3 開始,且在時(shí)刻 5 結(jié)束携栋,共計(jì) 2 個(gè)單位時(shí)間搭盾。
任務(wù) 2 于時(shí)刻 5 開始,且在時(shí)刻 9 結(jié)束婉支,共計(jì) 4 個(gè)單位時(shí)間鸯隅。
任務(wù) 3 于時(shí)刻 9 開始,且在時(shí)刻 15 結(jié)束向挖,共計(jì) 6 個(gè)單位時(shí)間蝌以。
時(shí)間最長的任務(wù)是任務(wù) 3 ,而 id 為 1 的員工是處理此任務(wù)的員工何之,所以返回 1 跟畅。
示例 2:
輸入:n = 26, logs = [[1,1],[3,7],[2,12],[7,17]]
輸出:3
解釋:
任務(wù) 0 于時(shí)刻 0 開始,且在時(shí)刻 1 結(jié)束帝美,共計(jì) 1 個(gè)單位時(shí)間碍彭。
任務(wù) 1 于時(shí)刻 1 開始晤硕,且在時(shí)刻 7 結(jié)束,共計(jì) 6 個(gè)單位時(shí)間庇忌。
任務(wù) 2 于時(shí)刻 7 開始舞箍,且在時(shí)刻 12 結(jié)束,共計(jì) 5 個(gè)單位時(shí)間皆疹。
任務(wù) 3 于時(shí)刻 12 開始疏橄,且在時(shí)刻 17 結(jié)束,共計(jì) 5 個(gè)單位時(shí)間略就。
時(shí)間最長的任務(wù)是任務(wù) 1 捎迫,而 id 為 3 的員工是處理此任務(wù)的員工,所以返回 3 表牢。
示例 3:
輸入:n = 2, logs = [[0,10],[1,20]]
輸出:0
解釋:
任務(wù) 0 于時(shí)刻 0 開始窄绒,且在時(shí)刻 10 結(jié)束,共計(jì) 10 個(gè)單位時(shí)間崔兴。
任務(wù) 1 于時(shí)刻 10 開始彰导,且在時(shí)刻 20 結(jié)束,共計(jì) 10 個(gè)單位時(shí)間敲茄。
時(shí)間最長的任務(wù)是任務(wù) 0 和 1 位谋,處理這兩個(gè)任務(wù)的員工的 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 按嚴(yán)格遞增順序排列
2.思路
- 方法:for循環(huán)
- 基本思想:
1.進(jìn)行循環(huán)遍歷掏父,將后一個(gè)數(shù)組的第二個(gè)值減去前一個(gè)數(shù)組的第二個(gè)值,獲取差值即是對應(yīng)的完成任務(wù)的時(shí)間秆剪。
2.將id和差值存入到buffer中赊淑,便于處理。
3.將buffer進(jìn)行按照第二個(gè)值進(jìn)行分組鸟款,然后再按照第一個(gè)值獲取最小值膏燃,最后進(jìn)行排序按照第二個(gè)值降序排序茂卦。
4.返回最小值的id
3.代碼
object Solution {
def hardestWorker(n: Int, logs: Array[Array[Int]]): Int = {
import scala.collection.mutable.ArrayBuffer
val tuples = new ArrayBuffer[(Int,Int)]()
var num = 0
for(arr<-logs){
tuples.append((arr(0),arr(1)-num))
num = arr(1)
}
val result: List[(Int, Int)] = tuples.groupBy(a=>a._2).mapValues(x=>x.minBy(_._1)).values.toList.sortBy(x=>x._2).reverse
return result.head._1
}
}
4.復(fù)雜度分析
時(shí)間復(fù)雜度:O(N)
空間復(fù)雜度:O(N)