首页 > 其他分享 >LeetCode 1116. Print Zero Even Odd

LeetCode 1116. Print Zero Even Odd

时间:2022-10-14 10:00:14浏览次数:72  
标签:Even even printNumber 1116 zero Zero Semaphore output odd

原题链接在这里:https://leetcode.com/problems/print-zero-even-odd/

题目:

You have a function printNumber that can be called with an integer parameter and prints it to the console.

  • For example, calling printNumber(7) prints 7 to the console.

You are given an instance of the class ZeroEvenOdd that has three functions: zeroeven, and odd. The same instance of ZeroEvenOdd will be passed to three different threads:

  • Thread A: calls zero() that should only output 0's.
  • Thread B: calls even() that should only output even numbers.
  • Thread C: calls odd() that should only output odd numbers.

Modify the given class to output the series "010203040506..." where the length of the series must be 2n.

Implement the ZeroEvenOdd class:

  • ZeroEvenOdd(int n) Initializes the object with the number n that represents the numbers that should be printed.
  • void zero(printNumber) Calls printNumber to output one zero.
  • void even(printNumber) Calls printNumber to output one even number.
  • void odd(printNumber) Calls printNumber to output one odd number.

Example 1:

Input: n = 2
Output: "0102"
Explanation: There are three threads being fired asynchronously.
One of them calls zero(), the other calls even(), and the last one calls odd().
"0102" is the correct output.

Example 2:

Input: n = 5
Output: "0102030405"

Constraints:

  • 1 <= n <= 1000

题解:

Use Semaphore. Semaphore(0) means each acquire needs to wait for release.

Semaphore(1) means first acquire could get it, but following acquire needs to wait for release.

Time Complexity: O(1).

Space: O(1).

AC Java:

 1 class ZeroEvenOdd {
 2     private int n;
 3     private Semaphore zeroSem;
 4     private Semaphore evenSem;
 5     private Semaphore oddSem;
 6     
 7     public ZeroEvenOdd(int n) {
 8         this.n = n;
 9         zeroSem = new Semaphore(1);
10         evenSem = new Semaphore(0);
11         oddSem = new Semaphore(0);
12     }
13 
14     // printNumber.accept(x) outputs "x", where x is an integer.
15     public void zero(IntConsumer printNumber) throws InterruptedException {
16         for(int i = 1; i <= n; i++){
17             zeroSem.acquire();
18             printNumber.accept(0);
19             if(i % 2 == 0){
20                 evenSem.release();
21             }else{
22                 oddSem.release();
23             }
24         }
25     }
26 
27     public void even(IntConsumer printNumber) throws InterruptedException {
28         for(int i = 2; i <= n; i += 2){
29             evenSem.acquire();
30             printNumber.accept(i);
31             zeroSem.release();
32         }
33     }
34 
35     public void odd(IntConsumer printNumber) throws InterruptedException {
36         for(int i = 1; i <= n; i += 2){
37             oddSem.acquire();
38             printNumber.accept(i);
39             zeroSem.release();
40         }
41     }
42 }

类似Fizz Buzz Multithreaded.

标签:Even,even,printNumber,1116,zero,Zero,Semaphore,output,odd
From: https://www.cnblogs.com/Dylan-Java-NYC/p/16790662.html

相关文章

  • threading.Event
      ​​https://www.jb51.net/article/185879.htm​​  importthreadingimporttimeimportlogginglogging.basicConfig(level=logging.DEBUG,format='(%(threadName)-......
  • Event Loop详解
    EventLoop先举一个列子console.log('start');setTimeout(()=>{console.log('timeout');});Promise.resolve().then(()=>{console.log('resolve');});console.log('......
  • 【Vegas改编】alter system set events转储
    格式:altersystem|sessionsetevents‘[eventnumber|immediate]tracenameeventname[forever][,levellevelnumber]:…….’通过:符号,可以连续设置多个事件,也可......
  • Server Sent Events传参
    ServerSentEvents前端给后端传递参数 前端建立连接<script>vartime=guid();varurl="/Home/sse/?guid="+time+"&t=10000";varsource=ne......
  • 了解 EventLog Analyzer Manager Engine 的 7 个最重要的功能
    EventLogAnalyzer是一种便捷的信息安全和事件管理(SIEM)解决方案,有助于提高网络安全性并满足审计要求。EventLogAnalyzer该程序还能够收集、分析、搜索、报告和存档从各......
  • 用typescript实现一个event bus
    一个简单eventbus的实现发布订阅者模式typeemitKey=number|string|symbol;typefunc=(...args:any)=>void;interfaceBusInterface{emit:(key:emi......
  • tracer ftrace笔记(9)—— TRACE_EVENT 初始化
    基于Linux-5.10一、内核启动时遍历trace_event_call初始化流程1.TRACE_EVENT()多次展开定义了各种实现函数以后,最终把本event的所有的函数和数据存放在一个类型为s......
  • Qt 事件过滤器原理(installEventFilter函数)
    1、Qt实现事件过滤器的步骤如下:①、Qt调用voidQObject::installEventFilter(QObject*filterObj)把filterObj对象安装(或注册)为事件过滤器,filterObj也称为过滤器对象......
  • flask 生产环境打包 gevent
    fromflaskimportFlaskfromgeventimportpywsgiapp=Flask(__name__)@app.route("/")defhello():return"helloworld"if__name__=='__main__':#development......
  • 【Azure 媒体服务】记使用 Media Service 的官网示例代码 Audio Analyzer 出现卡顿在
    问题描述在使用AzureMediaService的官网示例(media-services-v3-java--> AudioAnalytics--> AudioAnalyzer )代码的过程中,根据配置添加了EventHub和StorageAcco......