public class Twitter {
private Map<Integer,user> usermap;
private static int timestamp=0;
class twitte{
int id;
int time;
twitte next;
twitte(int id){
this.id=id;
time=timestamp++;
next=null;
}
}
class user{
int id;
Set<Integer> fllowed;
twitte twittehead;
user(int id){
this.id=id;
fllowed=new HashSet<>();
twittehead=null;
fllow(id);
}
void fllow(int id){
fllowed.add(id);
}
void unfllow(int id){
fllowed.remove(id);
}
void post(int tweetId)
{
twitte temp=new twitte(tweetId);
temp.next=twittehead;
twittehead=temp;
}
}
class timecomparetor implements Comparator<twitte>{
public int compare(twitte t1,twitte t2){
return t2.time-t1.time;
}
}
/** Initialize your data structure here. */
public Twitter() {
usermap=new HashMap<Integer,user>();
}
public void postTweet(int userId, int tweetId) {
if(!usermap.containsKey(userId)){
user temp=new user(userId);
usermap.put(userId, temp);
}
usermap.get(userId).post(tweetId);
}
public List<Integer> getNewsFeed(int userId) {
List<Integer> ret=new LinkedList<>();
if(!usermap.containsKey(userId))
return ret;
Set<Integer> users=usermap.get(userId).fllowed;
PriorityQueue<twitte> q = new PriorityQueue<twitte>(users.size(), new timecomparetor());
for(int user :users){
twitte temp=usermap.get(user).twittehead;
if(temp!=null)
q.add(temp);
}
int n=0;
while(!q.isEmpty()&&n<10)
{
twitte temp=q.poll();
ret.add(temp.id);
if(temp.next!=null)
q.add(temp.next);
n++;
}
return ret;
}
public void follow(int followerId, int followeeId) {
if(!usermap.containsKey(followerId)){
user temp=new user(followerId);
usermap.put(followerId,temp);
}
if(!usermap.containsKey(followeeId))
{
user temp=new user(followeeId);
usermap.put(followeeId,temp);
}
usermap.get(followerId).fllow(followeeId);
}
public void unfollow(int followerId, int followeeId) {
if(!usermap.containsKey(followerId)||followerId==followeeId)
return ;
usermap.get(followerId).unfllow(followeeId);
}
}
355. Design Twitter
最新推荐文章于 2019-09-10 12:19:12 发布