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 will create 2 pointers : left (starting from 0

Diagonal Traversal of Matrix in Javascript

Diagonal Traversal of Matrix/2D Array in Javascript

Problem statement: 

In this post, we will traverse a given matrix/2D array diagonally (from center to top right corner). Refer below attached diagram for better understanding.

Diagonal pattern:

Expected Output:

expected output :
    1
    6
    11
    16
    2
    7
    12
    3
    8
    4

Input Matrix: 

let input2DArray = [
  [1234],
  [5678],
  [9101112],
  [13141516],
];


Solution Approach :

 When we think about the pattern required, we can confirm that there will always be n number of diagonals that we will be traversing, that means the outer loop will be from 0 to n-1. 

I have added below diagram for a matrix n x n:

Inner loop will be having 2 variables i and j as row and col of matrix. we can see that row index=i in each iteration starts from zero and j will start from the index= diagonal.


Let's write the code now:

let n = input2DArray.length;

for (let diag = 0diag < ndiag++) {
// this loop will go from 0 to n-1, 
// that is for each diagonal as shown in diagram.

  for (let i = 0j = diagj < n && i < nj++, i++) {
    // i is always starting with 0 
    // but j will start with index equals to diag.

    console.log(input2DArray[i][j]);
  }
}

Output:
1 6 11 16 2 7 12 3 8 4

 


Comments

Popular posts from this blog

Ice Cream Parlor : Hackerrank Problem and Solution

Javascript Problem: Find the next perfect square!!

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