501-迷你推特

实现一个迷你的推特,支持下列几种方法

  1. postTweet(user_id, tweet_text). 发布一条推特.
  2. getTimeline(user_id). 获得给定用户最新发布的十条推特,按照发布时间从最近的到之前排序
  3. getNewsFeed(user_id). 获得给定用户的朋友或者他自己发布的最新十条推特,从发布时间最近到之前排序
  4. follow(from_user_id, to_user_id). from_user_id 关注 to_user_id.
  5. unfollow(from_user_id, to_user_id). from_user_id 取消关注 to_user_id.

样例

postTweet(1, "LintCode is Good!!!")
>> 1
getNewsFeed(1)
>> [1]
getTimeline(1)
>> [1]
follow(2, 1)
getNewsFeed(2)
>> [1]
unfollow(2, 1)
getNewsFeed(2)
>> []

思路

  • 使用数组记录所有 twitter 的信息,数组值的插入顺序就是所有用户新建 Twitter 的顺序,所以在寻找最新的 twitter 时,只需要从后向前遍历数组即可
  • 在寻找用户自己的 twitter 时,从后向前遍历数组,若此条 twitter 的发布用户是自己,即可以将此 twitter 加入返回列表
  • 在寻找用户关注的用户(包括用户自己)的 twitter 时,使用 map 记录某用户的关注用户列表(map<int, set>),从后向前遍历数组,若此条 twitter 的发布用户在此用户的关注列表中,即可以将此 twitter 加入返回列表
  • 关注用户就是在此用户的关注列表中新建一个关注信息,取关就是取消关注信息

code

/**
* Definition of Tweet:
* class Tweet {
* public:
* int id;
* int user_id;
* String text;
* static Tweet create(int user_id, string tweet_text) {
* // This will create a new tweet object,
* // and auto fill id
* }
* }
*/
class MiniTwitter {
private:
vector<Tweet> Tweets;
map<int, set<int>> follows; public:
MiniTwitter() {
// initialize your data structure here.
} // @param user_id an integer
// @param tweet a string
// return a tweet
Tweet postTweet(int user_id, string tweet_text) {
// Write your code here
// 将用户自身加入其关注列表
follows[user_id].insert(user_id);
// 新建 twitter
Tweet t = Tweet::create(user_id, tweet_text);
Tweets.push_back(t);
return t;
} // @param user_id an integer
// return a list of 10 new feeds recently
// and sort by timeline
vector<Tweet> getNewsFeed(int user_id) {
// Write your code here
vector<Tweet> result;
// 在总 twitter 表中查找用户自己发布的 Twitter,最多十条
for (int i = Tweets.size() - 1, count = 0; i >= 0 && count < 10; i--) {
if (follows[user_id].find(Tweets[i].user_id) != follows[user_id].end()) {
result.push_back(Tweets[i]);
count++;
}
}
return result;
} // @param user_id an integer
// return a list of 10 new posts recently
// and sort by timeline
vector<Tweet> getTimeline(int user_id) {
// Write your code here
vector<Tweet> result;
// 在总 twitter 表中查找用户关注的用户发布的 Twitter,最多十条
for (int i = Tweets.size() - 1, count = 0; i >= 0 && count < 10; i--) {
if (Tweets[i].user_id == user_id) {
result.push_back(Tweets[i]);
count++;
}
}
return result;
} // @param from_user_id an integer
// @param to_user_id an integer
// from user_id follows to_user_id
void follow(int from_user_id, int to_user_id) {
// Write your code here
// 新建关注关系
follows[from_user_id].insert(to_user_id);
} // @param from_user_id an integer
// @param to_user_id an integer
// from user_id unfollows to_user_id
void unfollow(int from_user_id, int to_user_id) {
// Write your code here
// 取消关注关系
follows[from_user_id].erase(to_user_id);
}
};

lintcode-501-迷你推特的更多相关文章

  1. [LintCode] Mini Twitter 迷你推特

    Implement a simple twitter. Support the following method: postTweet(user_id, tweet_text). Post a twe ...

  2. [LintCode]——目录

    Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...

  3. (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)

    --------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...

  4. [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)

    [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...

  5. 迷你 MVC

    深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的 2014-04-05 13:52 by 自由的生活, 645 阅读, 2 评论, 收藏, 编 ...

  6. leetcode & lintcode for bug-free

    刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...

  7. leetcode & lintcode 题解

    刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...

  8. lintcode 刷题 by python 总结(1)

    博主之前在学习 python 的数据结构与算法的基础知识,用的是<problem-solving-with-algorithms-and-data-structure-using-python& ...

  9. 学生党如何拿到阿里技术offer: 《2016阿里巴巴校招内推offer之Java研发工程师(成功)》

    摘要: 这篇文章字字珠玑,这位面试的学长并非计算机相关专业,但是其技术功底足以使很多计算机专业的学生汗颜,这篇文章值得我们仔细品读,其逻辑条理清晰,问题把握透彻,语言表达精炼,为我们提供了宝贵的学习经 ...

随机推荐

  1. python django web 端文件上传

    利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...

  2. MySQL的主从复制+双主模式

    MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave  192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...

  3. 运行TensorFlow报错,“This program requires version 3.6.1 of the Protocol Buffer runtime library, but the installed version is 3.0.0.”

    报错信息: [libprotobuf FATAL google/protobuf/src/google/protobuf/stubs/common.cc:67] This program requir ...

  4. python学习笔记:第10天 函数进阶和作用域

    目录 1. 函数进阶 2. 命名空间 3. 关键字global和nonlocal 1. 函数进阶 动态接收位置参数 之前写的函数都是固定参数的,假设有个函数需要的参数由几十个,一个个写在形参的位置会非 ...

  5. django中的F和Q

    F查询 Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. 查询书id大于\小于价格的书籍 models.Book.ob ...

  6. 虚拟机ubuntu磁盘扩容

    1.虚拟机把磁盘大小进行改动 2.sudo apt-get install gparted 3.打开安装好的应用 4.进行分区改动 5.理论删除sda2和sda5重整后边即可,但此时sda2和sda5 ...

  7. 20155213 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

    20155213 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  8. 20155218 2006-2007-2 《Java程序设计》第3周学习总结

    20155218 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 ==使用在比较两个参考名称是否参考同一对象:equals()比较实质是否相同. 看见new关 ...

  9. 20155218 2006-2007-2 《Java程序设计》第2周学习总结

    20155218 2006-2007-2 <Java程序设计>第2周学习总结 教材学习内容总结 java编程风格: java中没有指针的概念,尽管也有数组和对象的引用的概念,但他的管理全部 ...

  10. 20155321 2016-2017-2 《Java程序设计》第一周学习总结

    学习目标 [√]了解Java基础知识 [√]了解JVM.JRE与JDK,并下载.安装.测试JDK [√]了解PATH.CLASSPATH.SOURCEPATH的作用并会设置 [√]初步使用IDE(推荐 ...