Discuss区看到的:
吸收了它的思想后,我用数组实现hash,遍历一次:
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
int hash[26];
memset(hash, 0, 26);
int maxCount = 0;
int numOfMaxCount = 1;
for(auto task:tasks) {
hash[task-'A']++;
if(hash[task-'A'] == maxCount) {
numOfMaxCount++;
} else if(hash[task-'A'] > maxCount) {
maxCount = hash[task-'A'];
numOfMaxCount = 1;
}
}
int result = (maxCount-1) * (n+1) + numOfMaxCount;
return max(result, (int)tasks.size());
}
};
结果简单的case过了,submit过不了。过不了的case数组元素数量上千,几次运行结果有时候对有时候错,我现在都不知道为什么。好气!
改成unordered_map后通过,不知道为什么
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
unordered_map<char,int> hash;
int maxCount = 0;
int numOfMaxCount = 1;
for(auto task:tasks) {
hash[task]++;
if(hash[task] == maxCount) {
numOfMaxCount++;
} else if(hash[task] > maxCount) {
maxCount = hash[task];
numOfMaxCount = 1;
}
}
int result = (maxCount-1) * (n+1) + numOfMaxCount;
return max(result, (int)tasks.size());
}
};
另外,tasks.size()需要转一下int,否则会报错,查资料它返回是这样的 Member type size_type is an unsigned integral type.
这道题应该还有其它解法,之后再去看吧~