Day 4 - Print In Order - Leetcode Problem Solved

Day 4 - Print In Order - Leetcode Problem Solved

#I4G10DaysOfCodeChallenge - Day 4

ยท

3 min read

In this article, I share only my thought process for day 4's Leetcode challenge for the #I4G10DaysOfCodeChallenge series. To curb the occurrence of plagiarism we've been advised to not share our solutions completely. I have never actually solved this problem on Leetcode before, so when I came across it; it looked really tough.

Let's have a look...

Problem statement, examples, and constraints.

Print In Order

#I4G10DaysOfCodeChallenge


Suppose we have a class:

public class Foo {
  public void first() { print("first"); }
  public void second() { print("second"); }
  public void third() { print("third"); }
}

The same instance of Foo will be passed to three different threads. Thread A will call first(), thread B will call second(), and thread C will call third(). Design a mechanism and modify the program to ensure that second() is executed after first(), and third() is executed after second()

Note:

We do not know how the threads will be scheduled in the operating system, even though the numbers in the input seem to imply the ordering. The input format you see is mainly to ensure our tests' comprehensiveness.

Example 1:

Input: nums = [1,2,3]
Output: "firstsecondthird"
Explanation: There are three threads being fired asynchronously. The input [1,2,3] means thread A calls first(), thread B calls second(), and thread C calls third(). "firstsecondthird" is the correct output.

Example 2:

Input: nums = [1,3,2]
Output: "firstsecondthird"
Explanation: The input [1,3,2] means thread A calls first(), thread B calls third(), and thread C calls second(). "firstsecondthird" is the correct output.

Constraints:

  • nums is a permutation of [1, 2, 3]

Thought Process

So like I said earlier, at first glance this problem looked really tough. But reading over and over again, I kind of figured out the major aim of the program. Which is this, "Design a mechanism and modify the program to ensure that second() is executed after first(), and third() is executed after second()."

After getting this, the question I asked myself was "how can I hold off my methods from running based on the completion of another method" and I got to googling.

So I found a package called threading that came in handy. Imported an Event property from it which helped me pause and play my code depending on the order I specified.

This process would have been explained better with code snippets, forgive me. I'm just following instructions.

Closing

Thanks for reading through, I hope you learned a thing or two. Will see you in the next challenge post.

Please share your thoughts in the comment section, let's talk :-)

Your friend in progress,

CodeProphet.

Did you find this article valuable?

Support Emmanuel Obi by becoming a sponsor. Any amount is appreciated!

ย