题意:
给你一个只含A~Z的数组,和n。让你重新排序,相同的字符之间的间隔不得小于n(用其他字符或者“idle”来填充),求排序后的数组的长度的最小值。
思路:
先找出出现次数最多的字符ch(如果有多个最多的字符,把初始位置扩大即可),按照间隔求出最远的位置,而出现次数小ch的字符完全可以填充在其间隔之间,如果间隔的数目不足,可以把某个间隔扩大(如果间隔不足,总长度其实就是原来的数组的个数)
代码:
bool cmp(int a,int b)
{
return a>b;
}
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
int m = tasks.size();
int arr[30];
memset(arr,0,sizeof(arr));
for(int i = 0;i<m;i++)
arr[tasks[i]-65]++;
sort(arr,arr+30,cmp);
int sum = 1;
for(int i = 1;i<30;i++)
if(arr[i]==arr[i-1])
sum++;
else
break;
//int k = max(n+1,sum);
int k = n+1;
int ans = sum+(arr[0]-1)*k;
ans = max(ans,m);
return ans;
}
};