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
Post a Comment