给定一个char数组,代表CPU需要做的任务,包含A-Z,不用考虑顺序,每个任务能在1个单位完成。但是有规定一个非负整数n代表两个相同任务之间需要至少n个时间单位。球最少数量的时间单位完成所有任务。
我的思路:
贪心的方法:考虑不周全,只能通过
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
priority_queue<point> q;
map<char,int> temp;
for(auto s:tasks)
temp[s]++;
for(auto s:temp)
{
q.push({s.first,s.second});
}
point top=q.top();
if(temp.size()==1)
return (top.x-1)*n+tasks.size();
vector<int> interval(n+1,top.x-1);
int i=1;
q.pop();
int re=0;
while(!q.empty())
{
if(interval[n]==0) break;
point cur=q.top();
q.pop();
if(interval[i]>cur.x+re)//当前标号间隙填不满
interval[i]-=cur.x;
else//当前标号间隙能够填满
{
if(cur.x<top.x)re=cur.x+re-interval[i];//将当前标号填满,可能还剩余一些字母
else re=0;
interval[i]=0;
i++;
}
}
return accumulate(interval.begin()+1,interval.end(),0)+tasks.size();
}
struct point{
char a;
int x;
friend bool operator<(const point& i,const point& j){
return i.x<j.x;
}
};
};