Skip to main content

Move Zeroes to end of Array in Java | LeetCode problem

Java code for Move All Zeroes to end of given Array without creating new Array with explanation

Problem Description :-

Given an integer array, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Note that you must do this in-place without making a copy of the array.

Example 1 :-

Input: nums = [0, 1, 0, 3, 12]
Output: [1, 3, 12, 0, 0]

Example 2 :-

Input: nums = [1, 0, 0, 5, 6, 9, 0]
Output: [1, 5, 6, 9, 0, 0, 0]

Solution 1

class Solution {
    
    public void moveZeroes(int[] array) {
        
        // Traverse array from left to right
        for (int i = 0; i < array.length-1; i++) {
           
            // Check if current element is 0 or not.
            if (array[i] == 0) {
               
                // If current element is 0 then again traverse array
                // From i+1 to last array element
                for (int j = i+1; j < array.length; j++) {

                    // If next element is non 0,
                    // then swap j index element to i index and break inner loop.
                    if (array[j] != 0) {
                        array[i] = array[j];
                        array[j] = 0;
                        break;
                    }
                }
            }
        }
    }
}

Explanation :-

array =  [0, 1, 0, 3, 12]

  • Outer for loop. i = 0, array = [0, 1, 0, 3, 12]
    • array[0] == 0 becomes true.
    • Inner for loop. j = 1
      • array[1] != 0 becomes true.
      • Swap array[0] = array[1] and assign array[1] = 0. 
      • array = [1, 0, 0, 3, 12]
      • Break inner loop.
  •  i = 1, array = [1, 0, 0, 3, 12]
    • array[1] == 0 becomes true.
    • Inner for loop. j = 2
      • array[2] != 0 becomes false.
    • j = 3
      • array[3] != 0 becomes false.
      • Swap array[1] = array[3] and assign array[3] = 0. 
      • array = [1, 3, 0, 0, 12]
      • Break inner loop.
  • i = 2, array = [1, 3, 0, 0, 12]
    • array[2] == 0 becomes true.
    • Inner for loop. j = 3
      • array[3] != 0 becomes false.
    • j = 4
      • array[4] != 0 becomes false.
      • Swap array[2] = array[4] and assign array[4] = 0. 
      • array = [1, 3, 12, 0, 0]
      • Break inner loop.
  • i = 3, array = [1, 3, 12, 0, 0]
    • array[3] == 0 becomes true.
    • Inner for loop. j = 4
      • array[4] != 0 becomes false.
  • i = 4. condition becomes false in for loop and we got final array as below.
  • array = [1, 3, 12, 0, 0]

Solution 2

class Solution {
    
    public void moveZeroes(int[] array) {
        
        int lastNonZeroIndex = 0;
for (int i = 0; i < array.length; i++) {
    if (array[i] != 0) {
        array[lastNonZeroIndex++] = array[i];
    }
}

for (int i = lastNonZeroIndex; i < array.length; i++) {
    array[i] = 0;
}
    }
}

Explanation :-

  • Define int variable and assign value 0.
  • Traverse array from left to right.
  • If current element is non zero, then assign at lastNonZeroIndex variable index.
  • In second for loop, put all 0 at end of array.

Solution Explanation :-

array =  [0, 1, 0, 3, 12]

  • First For Loop
  • i = 0, lastNonZeroIndex = 0
    • array[0] != 0 becomes false.
  • i = 1, lastNonZeroIndex = 0
    • array[1] != 0 becomes true.
    • array[0] = array[1]
    • array = [1, 1 ,0, 3, 12]
  • i = 2, lastNonZeroIndex = 1
    • array[2] != 0 becomes false.
  • i = 3, lastNonZeroIndex = 1
    • array[3] != 0 becomes true.
    • array[1] = array[3]
    • array = [1, 3 ,0, 3, 12]
  • i = 4, lastNonZeroIndex = 2
    • array[4] != 0 becomes true.
    • array[2] = array[4]
    • array = [1, 3 ,12 , 3, 12]
  • i = 5, lastNonZeroIndex = 3

  • Second For Loop
  • i = lastNonZeroIndex | i = 3
    • array[3] = 0
  • i = 4
    • array[4] = 0
  • array = [1, 3, 12, 0, 0]

 

Happy Coding.

Other articles you may like :-

Comments

Popular posts from this blog

Queen's Attack II HackerRank Solution in Java with Explanation

Queen's Attack II Problem's Solution in Java (Chessboard Problem)   Problem Description : You will be given a square chess board with one queen and a number of obstacles placed on it. Determine how many squares the queen can attack.  A queen is standing on an n * n chessboard. The chess board's rows are numbered from 1 to n, going from bottom to top. Its columns are numbered from 1 to n, going from left to right. Each square is referenced by a tuple, (r, c), describing the row r and column c, where the square is located. The queen is standing at position (r_q, c_q). In a single move, queen can attack any square in any of the eight directions The queen can move: Horizontally (left, right) Vertically (up, down) Diagonally (four directions: up-left, up-right, down-left, down-right) The queen can move any number of squares in any of these directions, but it cannot move through obstacles. Input Format : n : The size of the chessboard ( n x n ). k : The number of obstacles...

Simple Text Editor HackerRank Solution in Java with Explanation

Simple Text Editor HackerRank Solution in Java with Explanation Problem Description : Implement a simple text editor. The editor initially contains an empty string S. Perform Q operations of the following 4 types: append (W) - Append string W to the end of S. delete (k) - Delete the last K characters of S. print (k) - Print the kth character of S. undo () - Undo the last (not previously undone) operation of type 1 or 2, reverting S to the state it was in prior to that operation. Example : Input : S = "abcde" Operations = ["1 fg", "3 6", "2 5", "4", "3 7", "4", "3 4"] index   S          ops[index]    explanation -----   ------     ----------    ----------- 0       abcde      1 fg          append fg 1       abcdefg    3 6        ...