123 lines
12 KiB
HTML
123 lines
12 KiB
HTML
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><title> leetcode-design-twitter · MarkDown</title><meta name="description" content="leetcode-design-twitter - Ching"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="short icon" href="/favicon.png"><link rel="stylesheet" href="/css/apollo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600" type="text/css"><style><!-- hexo-inject:begin --><!-- hexo-inject:end -->mjx-container[jax="SVG"] {
|
||
direction: ltr;
|
||
}
|
||
|
||
mjx-container[jax="SVG"] > svg {
|
||
overflow: visible;
|
||
}
|
||
|
||
mjx-container[jax="SVG"] > svg a {
|
||
fill: blue;
|
||
stroke: blue;
|
||
}
|
||
|
||
mjx-container[jax="SVG"][display="true"] {
|
||
display: block;
|
||
text-align: center;
|
||
margin: 1em 0;
|
||
}
|
||
|
||
mjx-container[jax="SVG"][justify="left"] {
|
||
text-align: left;
|
||
}
|
||
|
||
mjx-container[jax="SVG"][justify="right"] {
|
||
text-align: right;
|
||
}
|
||
|
||
g[data-mml-node="merror"] > g {
|
||
fill: red;
|
||
stroke: red;
|
||
}
|
||
|
||
g[data-mml-node="merror"] > rect[data-background] {
|
||
fill: yellow;
|
||
stroke: none;
|
||
}
|
||
|
||
g[data-mml-node="mtable"] > line[data-line] {
|
||
stroke-width: 70px;
|
||
fill: none;
|
||
}
|
||
|
||
g[data-mml-node="mtable"] > rect[data-frame] {
|
||
stroke-width: 70px;
|
||
fill: none;
|
||
}
|
||
|
||
g[data-mml-node="mtable"] > .mjx-dashed {
|
||
stroke-dasharray: 140;
|
||
}
|
||
|
||
g[data-mml-node="mtable"] > .mjx-dotted {
|
||
stroke-linecap: round;
|
||
stroke-dasharray: 0,140;
|
||
}
|
||
|
||
g[data-mml-node="mtable"] > svg {
|
||
overflow: visible;
|
||
}
|
||
|
||
[jax="SVG"] mjx-tool {
|
||
display: inline-block;
|
||
position: relative;
|
||
width: 0;
|
||
height: 0;
|
||
}
|
||
|
||
[jax="SVG"] mjx-tool > mjx-tip {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
}
|
||
|
||
mjx-tool > mjx-tip {
|
||
display: inline-block;
|
||
padding: .2em;
|
||
border: 1px solid #888;
|
||
font-size: 70%;
|
||
background-color: #F8F8F8;
|
||
color: black;
|
||
box-shadow: 2px 2px 5px #AAAAAA;
|
||
}
|
||
|
||
g[data-mml-node="maction"][data-toggle] {
|
||
cursor: pointer;
|
||
}
|
||
|
||
mjx-status {
|
||
display: block;
|
||
position: fixed;
|
||
left: 1em;
|
||
bottom: 1em;
|
||
min-width: 25%;
|
||
padding: .2em .4em;
|
||
border: 1px solid #888;
|
||
font-size: 90%;
|
||
background-color: #F8F8F8;
|
||
color: black;
|
||
}
|
||
|
||
foreignObject[data-mjx-xml] {
|
||
font-family: initial;
|
||
line-height: normal;
|
||
overflow: visible;
|
||
}
|
||
|
||
.MathJax path {
|
||
stroke-width: 3;
|
||
}
|
||
|
||
mjx-container {
|
||
overflow: auto hidden;
|
||
}
|
||
|
||
mjx-container + br {
|
||
display: none;
|
||
}
|
||
</style><!-- hexo-inject:begin --><!-- hexo-inject:end --></head><body><header><a href="/" class="logo-link"><img src="/logo.png"></a><ul class="nav nav-list"><li class="nav-list-item"><a href="/" target="_self" class="nav-list-link">ALL</a></li><li class="nav-list-item"><a href="/categories/leetcode/" target="_self" class="nav-list-link">LEETCODE</a></li><li class="nav-list-item"><a href="https://bearmiebear.blogspot.com" target="_blank" class="nav-list-link">BEAR</a></li><li class="nav-list-item"><a href="/atom.xml" target="_self" class="nav-list-link">RSS</a></li></ul></header><section class="container"><div class="post"><article class="post-block"><h1 class="post-title">leetcode-design-twitter</h1><div class="post-meta"><div class="post-time">2020年4月14日</div></div><div class="post-content"><h3 id="355-__u8BBE_u8BA1_u63A8_u7279"><a href="#355-__u8BBE_u8BA1_u63A8_u7279" class="headerlink" title="355. 设计推特"></a>355. 设计推特</h3><p><a href="https://leetcode-cn.com/problems/design-twitter/" target="_blank" rel="noopener">题目</a></p>
|
||
<!-- hexo-inject:begin --><!-- hexo-inject:end --><a id="more"></a>
|
||
<p>做出来倒是很简单,由于没有并发和特别的条件,测试数据量也不大。一开始搞错了,以为传入的 <code>twitterId</code> 就是自增的 id,结果其实是每条推的内容,所以增加了一个计数器去标记 id。</p>
|
||
<p>主要的考点应该是 <code>多路归并</code> 这个东西。我用的是排序,在数据量大的时候应该会有些问题。</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Twitter</span>:</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Initialize your data structure here.</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> self.tweets = {}</span><br><span class="line"> self.followers = {}</span><br><span class="line"> self._tid = <span class="number">0</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">postTweet</span><span class="params">(self, userId: int, tweetId: int)</span> -> <span class="keyword">None</span>:</span></span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Compose a new tweet.</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.tweets.get(userId):</span><br><span class="line"> self.tweets[userId] = []</span><br><span class="line"> self.tweets[userId].append((self._tid, tweetId))</span><br><span class="line"> self._tid += <span class="number">1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getNewsFeed</span><span class="params">(self, userId: int)</span> :</span></span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user herself. Tweets must be ordered from most recent to least recent.</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> foers = self.followers.get(userId, set())</span><br><span class="line"> foers = foers.union((userId,))</span><br><span class="line"> tweets = []</span><br><span class="line"> <span class="keyword">for</span> fo <span class="keyword">in</span> foers:</span><br><span class="line"> tweets.extend(self.tweets.get(fo, [])[<span class="number">-10</span>:])</span><br><span class="line"> <span class="keyword">return</span> [tw[<span class="number">1</span>] <span class="keyword">for</span> tw <span class="keyword">in</span> sorted(tweets, reverse=<span class="keyword">True</span>)[:<span class="number">10</span>]]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">follow</span><span class="params">(self, followerId: int, followeeId: int)</span> -> <span class="keyword">None</span>:</span></span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Follower follows a followee. If the operation is invalid, it should be a no-op.</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.followers.get(followerId):</span><br><span class="line"> self.followers[followerId] = set()</span><br><span class="line"> self.followers[followerId].add(followeeId)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">unfollow</span><span class="params">(self, followerId: int, followeeId: int)</span> -> <span class="keyword">None</span>:</span></span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Follower unfollows a followee. If the operation is invalid, it should be a no-op.</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.followers.get(followerId):</span><br><span class="line"> self.followers[followerId] = set()</span><br><span class="line"> <span class="keyword">if</span> followeeId <span class="keyword">in</span> self.followers[followerId]:</span><br><span class="line"> self.followers[followerId].remove(followeeId)</span><br><span class="line"></span><br><span class="line"><span class="comment">#100 ms 19.2 MB</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Your Twitter object will be instantiated and called as such:</span></span><br><span class="line"><span class="comment"># obj = Twitter()</span></span><br><span class="line"><span class="comment"># obj.postTweet(userId,tweetId)</span></span><br><span class="line"><span class="comment"># param_2 = obj.getNewsFeed(userId)</span></span><br><span class="line"><span class="comment"># obj.follow(followerId,followeeId)</span></span><br><span class="line"><span class="comment"># obj.unfollow(followerId,followeeId)</span></span><br></pre></td></tr></table></figure>
|
||
</div></article></div></section><footer><div class="paginator"><a href="/2020/04/14/leetcode-add-two-numbers-ii/" class="prev">PRVE</a><a href="/2020/04/09/leetcode-he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/" class="next">NEXT</a></div><div class="copyright"><p>© 2016 - 2020 <a href="http://blog.tunpok.com">Ching</a>, unless otherwise noted.</p></div></footer><script src="https://cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><!-- hexo-inject:begin --><!-- hexo-inject:end --></body></html> |