Dutch national flag problem in Javascript

Image
Dutch national flag problem and solution in Javascript Problem statement:   The Dutch national flag (DNF) problem is one of the most popular programming problems proposed by Edsger Dijkstra. The flag of the Netherlands consists of three colors: white, red, and blue. The task is to randomly arrange balls of white, red, and blue such that balls of the same color are placed together. Now, let's consider an array with 3 distinct values say 0, 1 and 2. We won't be using any sort method and we need to sort this array in 0(n). Input Array :  let   arr  = [ 0 ,  2 ,  1 ,  0 ,  1 ,  2 ,  0 ,  2 ]; Expected Output: [ 0, 0, 0, 1, 1, 2, 2, 2 ] Solution Approach : When we see expected output, we can clearly see that sorted array is divided into 3 sections having values 0 , 1 and 2. So, let's divide the array in 3 sections: a) from 0th index to left boundary b) from left boundary to right boundary c) from right boundary to last index. Now we...

Flatten array in Javascript

In this post, we will see how we can flatten an array in Javascript. This was asked to me in an interview.

Problem Statement:

Input array: 

let arr = [123, [45], [[67], 8]];

Expected Output:

[ 1, 2, 3, 4, 5, 6, 7, 8 ]

Approach 1: Using Array.flat()

Use the Array.flat() method to get the desired output.

The flat() method creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.

We will use "Infinity" as the depth so that it will merge all the nested elements. Refer below screenshot for the output.

console.log(arr.flat(Infinity));
Output: [12345678]


But what if you are not allowed to use the inbuilt method in the interview. We can use something like approach 2 for that.

Approach 2: Without Array.flat()

we can use a recursive function. It will have a for each method that will act on each element of the parent array and if the element is found to be a nested array then it will call the recursive function again but now only with the subarray element. I have added below code as an example to show how it can be achieved:

let result = [];
function flatten(arr) {
  arr.forEach((element=> {
    
    if (element.length) {
      flatten(element);
    } else result.push(element);
  });
  return result;
}

console.log(flatten(arr));

Output: [12345678]





Comments

Popular posts from this blog

Ice Cream Parlor : Hackerrank Problem and Solution

Disemvowel Trolls || Codewars problem and solution in Javascript || Topic : Strings and RegEx

Descending Order || CodeWars Problem and solution in javascript.