Greedy scheduling.

int leastInterval(vector<char>& tasks, int n) {
   vector<int> freqs(26);
   for(auto task : tasks) {
	  freqs[task-'A']++;
   }
   
   sort(freqs.begin(), freqs.end(), greater<int>());
   
   int maxFrequency = freqs[0];
   int idle = (maxFrequency - 1) * n;
   
   for(int i=1;i<freqs.size()-1;i++) {
	  idle -= min(maxFrequency-1, freqs[i]);
   }
   idle = max(idle, 0);
   
   return idle + tasks.size();
   
   return 0;
}