2022年11月7日 星期一

[621] Task Scheduler

好吧其實我真的沒有很懂這題......
應該是~~~
1.  bottleneck一定是出現最多次的task
2. 把這個task剛cooling time當成一組, 去算最少的"加上idke"的時間長. 
3. 最後考慮當出現最多次的item 超過一個的時候, 表示它會往後面長出尾巴(XD)
4. return 值是上面算出來的, 跟 原本的task 長度, 取大的 !(因為當task 超多組的且IDLE 很小的時候, IDLE 根本不重要?!)

例子: 
AAABBBCCD , n = 2
先把 AAA max =3 算出來, IDLE用#表示. 那麼
A##A##A 是一個必然的IDLE形式, 把A也加進# 一起算 , 等於一組是一個A##
所以是 (3-1) 先扣掉最尾巴的A , 然候一組的長度是A## (1+2) , 2*3=6
意思是總共有兩輪, 每一輪長度是3 , 因此目前長度是6

接下來把BBBCCD 填進#的位置. 
最後是因為max=3 有A跟B 兩個, 所以要把它加回來
(這部分其實就我有點無法用解釋來好好證明了QQ)
但已經花太多時間了XD 先前進下一題吧.

int leastInterval(char* tasks, int tasksSize, int n){
int *CountArr = calloc (26, sizeof(int));
int max = 0;
for (int i=0; i<tasksSize; i++)
{
int index = tasks[i]-'A';
CountArr[index]++;
if (CountArr[index] > max)
max = CountArr[index];
}
int idleSize=0;
idleSize = (n+1)*(max-1);
for (int i=0; i<26; i++)
{
if (CountArr[i]==max)
idleSize++;
}
return (tasksSize > idleSize)?tasksSize:idleSize;
}
 

沒有留言:

張貼留言