程式語言 - LeetCode - CPP - 355. Design Twitter



題目:


解答:

class Twitter {
private:
    int time;
    unordered_map<int, map<int, int>> tweets;
    unordered_map<int, unordered_set<int>> friends; 

public:
    Twitter() {
        time = 0;
    }
    
    void postTweet(int userId, int tweetId) {
        follow(userId, userId);
        tweets[userId].insert({ time++, tweetId });
    }
    
    vector<int> getNewsFeed(int userId) {
        map<int, int> top10;

        for (auto id : friends[userId]) {
            for (auto a : tweets[id]) {
                top10.insert({ a.first, a.second });
                if (top10.size() > 10) {
                    top10.erase(top10.begin());
                }
            }
        }

        vector<int> ans;
        for (auto a : top10) {
            ans.insert(ans.begin(), a.second);
        }

        return ans;
    }
    
    void follow(int followerId, int followeeId) {
        friends[followerId].insert(followeeId);
    }
    
    void unfollow(int followerId, int followeeId) {
        if (followerId != followeeId) {
            friends[followerId].erase(followeeId);
        }
    }
};

/**
 * Your Twitter object will be instantiated and called as such:
 * Twitter* obj = new Twitter();
 * obj->postTweet(userId,tweetId);
 * vector<int> param_2 = obj->getNewsFeed(userId);
 * obj->follow(followerId,followeeId);
 * obj->unfollow(followerId,followeeId);
 */