Day 4 - Print In Order - Leetcode Problem Solved
#I4G10DaysOfCodeChallenge - Day 4
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.