不得不说 真的很强 根本想不到
package leetcode; import java.util.*; /** * @author doyinana * @create 2020-04-14 0:29 */ public class Twitter { public static int timestamp=0; public class Tweet{ public int tweetId; public int time; public Tweet next; public Tweet(int tweetId ,int time){ this.tweetId = tweetId; this.time = time; this.next = null; } } public class User{ private int userId; public Set<Integer> followed; public Tweet headTweet; public User(int userId){ followed = new HashSet<>(); this.userId = userId; this.headTweet = null; //用户关注一下自己 follow(this.userId); } public void follow(int userId) { followed.add(userId); } public void unfollow(int userId) { // 不可以取关自己 if (userId != this.userId) followed.remove(userId); } public void post(int tweetId){ Tweet twt = new Tweet(tweetId,timestamp); timestamp++; twt.next=headTweet; headTweet=twt; } } private HashMap<Integer, User> userHashMap = new HashMap<>(); public void postTweet(int userId,int tweetId){ if(!userHashMap.containsKey(userId)){ userHashMap.put(userId,new User(userId)); } userHashMap.get(userId).post(tweetId); } public List<Integer> getNewsFeed(int userId){ List<Integer> result=new ArrayList<>(); if(!userHashMap.containsKey(userId)){ return result; } Set<Integer> users=userHashMap.get(userId).followed; PriorityQueue<Tweet> priorityQueue=new PriorityQueue<>(users.size(),(a,b)-> (b.time-a.time)); for(int id:users){ Tweet tweet=userHashMap.get(id).headTweet; if(tweet==null) continue; priorityQueue.add(tweet); } while(!priorityQueue.isEmpty()){ if(result.size()==10){ break; } Tweet tweet=priorityQueue.poll(); result.add(tweet.tweetId); if(tweet.next!=null){ priorityQueue.add(tweet.next); } } return result; } public void follow(int followerId,int followeeId){ if(!userHashMap.containsKey(followerId)){ userHashMap.put(followerId,new User(followerId)); } if (!userHashMap.containsKey(followeeId)) { userHashMap.put(followeeId, new User(followeeId)); } userHashMap.get(followerId).follow(followeeId); } public void unfollow(int followerId, int followeeId) { if (userHashMap.containsKey(followerId)) { userHashMap.get(followerId).unfollow(followeeId); } } }