LeetCode - 621. Task Scheduler - C++

Discuss区看到的:

C++ 8lines O(n)

吸收了它的思想后,我用数组实现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.

这道题应该还有其它解法,之后再去看吧~

猜你喜欢

转载自blog.csdn.net/L_bic/article/details/88943584