leetcode 621. Task Scheduler (贪心)

来源:互联网 发布:网络女主播收入排行榜 编辑:程序博客网 时间:2024/06/07 06:21

题意:

给你一个只含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;    }};

原创粉丝点击