【Lintcode】1786. Pub Sub Pattern
題目地址:
https://www.lintcode.com/problem/pub-sub-pattern/description
要求實現一個釋出/訂閱模式。實現下面功能:
1、subscribe(channel, user_id)
:將給定使用者訂閱到給定頻道。
2、unsubscribe(channel, user_id)
:取消訂閱給定使用者的給定使用者。
3、publish(channel, message)
:您需要將訊息釋出到頻道,以便在頻道上訂閱的每個人都會收到此訊息。 呼叫PushNotification.notify(user_id, message)
將訊息推送給使用者。
思路是雜湊表,key是channel名,value是個HashSet,存訂閱這個channel的user_id。程式碼如下:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class PubSubPattern {
private Map<String, Set<Integer>> map;
public PubSubPattern() {
// Write your code here
map = new HashMap<>();
}
/**
* @param channel: the channel's name
* @param user_id: the user who subscribes the channel
* @return: nothing
*/
public void subscribe(String channel, int user_id) {
// Write your code here
map.putIfAbsent(channel, new HashSet<>());
map.get(channel).add(user_id);
}
/**
* @param channel: the channel's name
* @param user_id: the user who unsubscribes the channel
* @return: nothing
*/
public void unsubscribe(String channel, int user_id) {
// Write your code here
Set<Integer> set = map.get(channel);
if (set != null && !set.isEmpty()) {
set.remove(user_id);
}
}
/**
* @param channel: the channel's name
* @param message: the message need to be delivered to the channel's subscribers
* @return: nothing
*/
public void publish(String channel, String message) {
// Write your code here
Set<Integer> set = map.get(channel);
if (set != null && !set.isEmpty()) {
for (int user_id : set) {
PushNotification.notify(user_id, message);
}
}
}
}
class PushNotification {
public static void notify(int user_id, String the_message) {}
}
所有操作時間複雜度 O ( 1 ) O(1) O(1),空間與具體所有頻道共多少人訂閱有關。
相關文章
- Redis的Pub/Sub客戶端實現Redis客戶端
- pub/sub的實際應用總結
- Building a Pub/Sub Message Bus with WCF and MSMQUIMQ
- 不使用 MQ 如何實現 pub/sub 場景?MQ
- 使用 EMQX Cloud 橋接資料到 GCP Pub/SubMQCloud橋接GC
- redis原始碼分析之釋出訂閱(pub/sub)Redis原始碼
- SpringBoot Redis 釋出訂閱模式 Pub/SubSpring BootRedis模式
- JMS pub/sub執行正常但訊息沒有
- 【Lintcode】1856. Sub-palindrome
- 基於Pub/Sub模式的阿里雲IoT同步呼叫詳解模式阿里
- mosquitto_pub和mosquitto_sub 命令引數說明UI
- Spotify如何從Apache kafka遷移到雲平臺的pub/sub系統ApacheKafka
- Redis 中使用 list,streams,pub/sub 幾種方式實現訊息佇列Redis佇列
- Akka-Cluster(2)- distributed pub/sub mechanism 分散式釋出/訂閱機制分散式
- 基於WCF和MSMQ構建釋出/訂閱訊息匯流排(Pub/Sub Message Bus)薦MQ
- 解釋一下這兩行 "pub": "pnpm --filter "./packages/*" run pub", "pub:beta": "pnpm --filter "./packages/*" run pub:beta"NPMFilterPackage
- pub.jsJS
- Debut in IT Pub BLOG
- <url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>區別
- HTML <sub> 下標HTML
- SVG <pattern>SVG
- 設計模式-COMMOND PATTERN (ACTIVE OBJECT PATTERN是一種特殊的COMMOND PATTERN)設計模式Object
- Adapter PatternAPT
- python中re.sub使用Python
- Pegging a sub strapon in Shanghai/Suzhou/WuxiAIUX
- Reliable Key Holder for Chastity Sub Anywhere in the WorldAST
- grep、sed、awk、head、tail、gsub、subAI
- mysql DATE_ADD DATE_SUBMySql
- awk sub和gsub區別及用法
- Oracle replace function to delete sub-stringOracleFunctiondelete
- [LintCode] Daily TemperaturesAI
- LintCode 子樹
- LintCode-Backpack
- LintCode-HeapifyAPI
- 策略模式【Strategy Pattern】模式
- Cache Aside PatternIDE
- STL and Design Pattern
- 代理模式(Proxy Pattern)模式