Facebook Interview Question
Software Engineer / DevelopersCountry: UK
Interview Type: In-Person
int[] arr = { 1, 2, 0, 5, 3, 0, 4, 0 };
int endIndex = arr.Length - 1;
int foundZeros = 0;
for (int i = 0; i <= endIndex; i++)
{
if (arr[i] == 0)
{
foundZeros++;
while (arr[endIndex] == 0)
{
endIndex--;
foundZeros++;
}
if (i >= endIndex) break;
arr[i] = arr[endIndex];
arr[endIndex] = 0;
}
}
Console.WriteLine(foundZeros);
int ReArrange(int[] arr)
{
int endIndex = arr.Length - 1;
int foundZeros = 0;
for (int i = 0; i <= endIndex; i++)
{
if (arr[i] == 0)
{
foundZeros++;
if (i == endIndex) break;
while (arr[endIndex] == 0)
{
endIndex--;
foundZeros++;
}
if (i >= endIndex) break;
arr[i] = arr[endIndex];
arr[endIndex] = 0;
endIndex--;
}
}
return arr.Length - foundZeros;
}
int ReArrange(int[] arr)
{
int endIndex = arr.Length - 1;
int foundZeros = 0;
for (int i = 0; i <= endIndex; i++)
{
if (arr[i] == 0)
{
foundZeros++;
if (i == endIndex) break;
while (arr[endIndex] == 0)
{
endIndex--;
foundZeros++;
}
if (i >= endIndex) break;
arr[i] = arr[endIndex];
arr[endIndex] = 0;
endIndex--;
}
}
return arr.Length - foundZeros;
}
#include<iostream>
using namespace std;
main()
{
int n;
cout<<"Number of elements : ";
cin>>n;
int *a = new int[n];
cout<<"Enter "<<n<<" numbers(with space) : ";
for(int i=0;i<n;i++)
cin>>a[i];
int k=n-1;
int p=0;
int temp;
for(int i=0;i<n-p;i++)
{
if(a[i]==0)
{
while(a[k]==0 && k!=i)
{
k-=1;
p+=1;
}
temp=a[i];
a[i]=a[k];
a[k]=temp;
k-=1;
p+=1;
}
}
cout<<"\nRearranged array : ";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<"\nTotal non-zero element : "<<n-p<<endl;
return 0;
}
package vij.dynaprogramming;
import vij.dynaprogramming.common.Util;
import java.util.Arrays;
/**
* Created by Vijay on 2017, April 08.
* This class focuses on all array rearranging related problems.
* Can be sorting, arrange based on customized requirement, etc.
*/
public class ArrayRearrange {
public static void main(String[] args) {
rearrangeArrayNonzeroFirstZeroLast(new int[]{99,0,1,0,4,0,87,0,9,7,8,11,23,1,1});
}
/**
* This method will rearrange the given integer array
* by moving all the non-zero numbers to beginning of the array and
* all zeroes to end of the array.
* Note: The non-zero numbers' sorting is not mandatory
*
* @param sourceArr int[]
*/
private static void rearrangeArrayNonzeroFirstZeroLast(int[] sourceArr) {
int sourceArrLen = sourceArr.length;
System.out.println("ARRAY SIZE["+sourceArrLen+"] Source Array:" + Arrays.toString(sourceArr));
int beginIdx = 0;
int endIdx = sourceArrLen - 1;
while (beginIdx < endIdx) {
if (sourceArr[beginIdx] == 0 && sourceArr[endIdx] == 0) {
//begin part is not fine, end part is fine
//move the end part and retain the begin part to swap
--endIdx;
} else if (sourceArr[beginIdx] == 0 && sourceArr[endIdx] != 0) {
//begin part is not fine and end part is not fine
//swap both items
//move the begin and end part further
swap(sourceArr, beginIdx, endIdx);
++beginIdx;
--endIdx;
} else if (sourceArr[beginIdx] != 0 && sourceArr[endIdx] == 0) {
//begin part and end part satisfies the requirement
//move further on both sides
++beginIdx;
--endIdx;
} else if (sourceArr[beginIdx] != 0 && sourceArr[endIdx] != 0) {
//begin part is fine, end part is not
//move the begin part and retain the end part to swap
++beginIdx;
}
}
System.out.println("Array after re-arranging:" + Arrays.toString(sourceArr));
}
public static void swap(int[] sourceArr, int idx1, int idx2) {
int temp = sourceArr[idx1];
sourceArr[idx1] = sourceArr[idx2];
sourceArr[idx2] = temp;
}
}
public static int rearrange(final int[] numbers){
int zeroStartIndex = -1;
int zeroEndIndex = -1;
final int length = numbers.length;
for(int i = 0 ;i < length&&zeroStartIndex<length&&zeroEndIndex<length; i++){
if(numbers[i] != 0 ){
if(zeroStartIndex > -1) {
SwapUtil.swap(numbers, zeroStartIndex, i);
zeroStartIndex++;
zeroEndIndex++;
}
}else {
if(zeroStartIndex == -1){
zeroStartIndex = zeroEndIndex = i;
}else {
zeroEndIndex++;
}
}
}
return (zeroStartIndex == -1 ) ? 0 : (zeroEndIndex - zeroStartIndex)+1;
}
private static int rearrange(int[] numbers){
int zeroStartIndex = -1;
int zeroEndIndex = -1;
int length = numbers.length;
for(int i = 0 ;i < length&&zeroStartIndex<length&&zeroEndIndex<length; i++){
if(numbers[i] != 0 ){
if(zeroStartIndex > -1) {
SwapUtil.swap(numbers, zeroStartIndex, i);
zeroStartIndex++;
zeroEndIndex++;
}
}else {
if(zeroStartIndex == -1){
zeroStartIndex = zeroEndIndex = i;
}else {
zeroEndIndex++;
}
}
}
return (zeroStartIndex == -1 ) ? 0 : (zeroEndIndex - zeroStartIndex)+1;
}
public static int sideLineZeros(int []arr){
int offset = arr.length - 1;
for (int i = 0; i <= offset; i++ ){
if (arr[i] == 0)
offset = swapZeros(arr, i, offset);
}
return offset;
}
private static int swapZeros(int[] arr, int index, int offset) {
int j;
for (j = offset; j > index; j--){
if (arr[j] != 0){
arr[index] = arr[j];
arr[j] = 0;
break;
}
}
return j;
}
public static void main(String[] args) {
int [] arr = {1,2,0,5,3,0,4,0};
System.out.println(sideLineZeros(arr));
}
import java.util.*;
public class RearrangeArray {
public int rearrange(int[] nums) {
int i = 0, j = nums.length - 1;
while(i < j) {
while(i < j && nums[i] != 0) i++;
while(i < j && nums[j] == 0) j--;
if(i < j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
return i;
}
public static void main(String[] args) {
RearrangeArray r = new RearrangeArray();
int[] nums = new int[]{1, 2, 0, 5, 3, 0, 4, 0 };
int count = r.rearrange(nums);
System.out.println(count + "," + Arrays.toString(nums));
}
}
public static int movenonzerotoleft(int iArray[])
{
try{
int iNonZeros=0;
int iZeros=0;
int endIndex=iArray.length-1;
// This is to calculate the end index non zero value
for( int iEnd=endIndex;iEnd>=0;iEnd--)
{
System.out.println("End is "+iArray[iEnd]);
if(iArray[iEnd]==0)
{
endIndex--;
iZeros++;
}
else
break;
}
System.out.println("End index is now "+endIndex);
// This is to swap the zero values to the last
for(int i=0;i<=endIndex;i++)
{
if(iArray[i] ==0)
{
int temp =iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while(temp==0) {endIndex--; temp =iArray[endIndex];iZeros++;}
iArray[endIndex]=0;
iArray[i]=temp;
endIndex--;
iZeros++;
}
}
//To Print the array
System.out.print("{");
for(int i=0;i<iArray.length;i++)
System.out.print( iArray[i]+" ");
System.out.println(" }");
System.out.println("No of zeros "+iZeros);
iNonZeros=iArray.length-iZeros;
return iNonZeros;
}catch(Exception e){}
return -1;
}
public static int movenonzerotoleft(int iArray[])
{
try{
int iNonZeros=0;
int iZeros=0;
int endIndex=iArray.length-1;
// This is to calculate the end index non zero value
for( int iEnd=endIndex;iEnd>=0;iEnd--)
{
System.out.println("End is "+iArray[iEnd]);
if(iArray[iEnd]==0)
{
endIndex--;
iZeros++;
}
else
break;
}
System.out.println("End index is now "+endIndex);
// This is to swap the zero values to the last
for(int i=0;i<=endIndex;i++)
{
if(iArray[i] ==0)
{
int temp =iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while(temp==0) {endIndex--; temp =iArray[endIndex];iZeros++;}
iArray[endIndex]=0;
iArray[i]=temp;
endIndex--;
iZeros++;
}
}
//To Print the array
System.out.print("{");
for(int i=0;i<iArray.length;i++)
System.out.print( iArray[i]+" ");
System.out.println(" }");
System.out.println("No of zeros "+iZeros);
iNonZeros=iArray.length-iZeros;
return iNonZeros;
}catch(Exception e){}
return -1;
}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 0, 0, 0, 5, 6, 0, 9, 0, 0, 0, 3, 0, 0, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 0, 0, 0, 5, 6, 0, 9, 0, 0, 0, 3, 0, 0, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 0, 0, 0, 5, 6, 0, 9, 0, 0, 0, 3, 0, 0, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1,4,5,0,6,7,0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}return -1;
}}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 4, 5, 0, 6, 7, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
JAVA
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 4, 5, 0, 6, 7, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
public class Movenonzeroleft {
public static int ivalues[] = new int[] { 1, 4, 5, 0, 6, 7, 0 };
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues));
}
public static int movenonzerotoleft(int iArray[]) {
try {
int iNonZeros = 0;
int iZeros = 0;
int endIndex = iArray.length - 1;
// This is to calculate the end index non zero value
for (int iEnd = endIndex; iEnd >= 0; iEnd--) {
System.out.println("End is " + iArray[iEnd]);
if (iArray[iEnd] == 0) {
endIndex--;
iZeros++;
} else
break;
}
System.out.println("End index is now " + endIndex);
// This is to swap the zero values to the last
for (int i = 0; i <= endIndex; i++) {
if (iArray[i] == 0) {
int temp = iArray[endIndex];
// This is to make sure the endIndex is a non zero value
while (temp == 0) {
endIndex--;
temp = iArray[endIndex];
iZeros++;
}
iArray[endIndex] = 0;
iArray[i] = temp;
endIndex--;
iZeros++;
}
}
// To Print the array
System.out.print("{");
for (int i = 0; i < iArray.length; i++)
System.out.print(iArray[i] + " ");
System.out.println(" }");
System.out.println("No of zeros " + iZeros);
iNonZeros = iArray.length - iZeros;
return iNonZeros;
} catch (Exception e) {
}
return -1;
}
}
public class Movenonzeroleft { public static int ivalues[] = new int[] { 1, 4, 5, 0, 6, 7, 0 }; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("No of Non Zeros " + movenonzerotoleft(ivalues)); } public static int movenonzerotoleft(int iArray[]) { try { int iNonZeros = 0; int iZeros = 0; int endIndex = iArray.length - 1; // This is to calculate the end index non zero value for (int iEnd = endIndex; iEnd >= 0; iEnd--) { System.out.println("End is " + iArray[iEnd]); if (iArray[iEnd] == 0) { endIndex--; iZeros++; } else break; } System.out.println("End index is now " + endIndex); // This is to swap the zero values to the last for (int i = 0; i <= endIndex; i++) { if (iArray[i] == 0) { int temp = iArray[endIndex]; // This is to make sure the endIndex is a non zero value while (temp == 0) { endIndex--; temp = iArray[endIndex]; iZeros++; } iArray[endIndex] = 0; iArray[i] = temp; endIndex--; iZeros++; } } // To Print the array System.out.print("{"); for (int i = 0; i < iArray.length; i++) System.out.print(iArray[i] + " "); System.out.println(" }"); System.out.println("No of zeros " + iZeros); iNonZeros = iArray.length - iZeros; return iNonZeros; } catch (Exception e) { } return -1; }
}
Can't paste my code due to some error. Putting down my logic here
1) First find the end index of the array and make sure its a non zero value . For loop the array from back till you encounter the first non zero value and make that as your end index
2) Now loop the array from starting till end index. Inside the loop if you encounter a zero value swap it with the end index value and reduce the end index by 1
3) During this swapping make sure , the end index value is a non zero [ while loop till you encounter non zero && array current position less than end index
4) Add zeroCounter in all the above scenarios and subtract it from array length during the end to get non zero count value
using PHP:
$array = array(1,2,0,5,3,0,4,0);
$result = array();
$foundZero = false;
foreach ($array as $arr) {
if (!$foundZero) {
if ($arr > 0) {
$result[] = $arr;
} else {
$foundZero = true;
$result[] = $arr;
}
} else {
$length = sizeof($result);
if ($arr > 0 ) {
for ($i = $length; $i > 0; $i--) {
$result[$i] = $result[$i-1];
}
$result[0] = $arr;
} else {
$result[] = $arr;
}
}
}
print_r($result);
Using PHP:
$array = array(1,2,0,5,3,0,4,0);
$result = array();
$foundZero = false;
foreach ($array as $arr) {
if (!$foundZero) {
if ($arr > 0) {
$result[] = $arr;
} else {
$foundZero = true;
$result[] = $arr;
}
} else {
$length = sizeof($result);
if ($arr > 0 ) {
for ($i = $length; $i > 0; $i--) {
$result[$i] = $result[$i-1];
}
$result[0] = $arr;
} else {
$result[] = $arr;
}
}
}
print_r($result);
$array = array(1,2,0,5,3,0,4,0);
$result = array();
$foundZero = false;
foreach ($array as $arr) {
if (!$foundZero) {
if ($arr > 0) {
$result[] = $arr;
} else {
$foundZero = true;
$result[] = $arr;
}
} else {
$length = sizeof($result);
if ($arr > 0 ) {
for ($i = $length; $i > 0; $i--) {
$result[$i] = $result[$i-1];
}
$result[0] = $arr;
} else {
$result[] = $arr;
}
}
}
print_r($result);
$array = array(1,2,0,5,3,0,4,0);
$result = array();
$foundZero = false;
foreach ($array as $arr) {
if (!$foundZero) {
if ($arr > 0) {
$result[] = $arr;
} else {
$foundZero = true;
$result[] = $arr;
}
} else {
$length = sizeof($result);
if ($arr > 0 ) {
for ($i = $length; $i > 0; $i--) {
$result[$i] = $result[$i-1];
}
$result[0] = $arr;
} else {
$result[] = $arr;
}
}
}
print_r($result);
public class NonZeroOnLeft {
public static void run(int[] src) {
for (int i = -1, j = src.length; i < j;) {
while (i < src.length - 1 && src[++i] != 0)
;
while (j > 0 && src[--j] == 0)
;
if (i >= j)
break;
int t = src[i];
src[i] = src[j];
src[j] = t;
}
}
}
test case
@Test
public void test() {
int length = new Random().nextInt(20) + 10;
int[] src = new int[length];
for (int i = 0; i < length; i++) {
src[i] = new Random().nextInt(5);
}
System.out.println(Arrays.toString(src));
NonZeroOnLeft.run(src);
System.out.println(Arrays.toString(src));
boolean zeroFound = false;
for (int i = 0; i < src.length; i++) {
if (src[i] == 0)
zeroFound = true;
Assert.assertTrue(zeroFound && src[i] == 0 || !zeroFound && src[i] != 0);
}
}
# Code in Python 3
import random
num_list = []
out_list = []
count = 0
n = int(input('Please enter the number of elements : '))
while len(num_list) < n:
num_list.append(random.randrange(0, 5))
print(num_list)
for j in num_list:
if j > 0:
out_list.append(j)
count += 1
for j in num_list:
if j == 0:
out_list.append(j)
print('There are', count, 'non-zero numbers and the list is as follows\n', out_list)
# Code in Python 3
import random
num_list = []
out_list = []
count = 0
n = int(input('Please enter the number of elements : '))
while len(num_list) < n:
num_list.append(random.randrange(0, 5))
print(num_list)
for j in num_list:
if j > 0:
out_list.append(j)
count += 1
for j in num_list:
if j == 0:
out_list.append(j)
print('There are', count, 'non-zero numbers and the list is as follows\n', out_list)
public int rearrangeArray(int [] array){
int tempZeroIdx = array.length-1;
int count = 0;
for(int i=array.length-1;i>=0;i-- ){
if(array[i] == 0){
if(tempZeroIdx != i){
swap(array,i,tempZeroIdx);
}
tempZeroIdx--;
count++;
}
}
return count;
}
private void swap(int[] array, int a,int b){
int temp = array[a];
array[a]=array[b];
array[b]=temp;
}
object Solution {
def readInput(): Array[Int] = {
val sc = new java.util.Scanner(System.in)
val n = sc.nextInt
val array = new Array[Int](n)
for (i <- 0 until n) {
array(i) = sc.nextInt
}
array
}
def rearrange(array: Array[Int]): Int = {
var z = array.length - 1
var i = 0
def swap(array: Array[Int], left: Int, right: Int) = {
if (left < right && array(left) == 0) {
array(left) = array(right)
array(right) = 0
}
}
def findRightMostNonZero(array: Array[Int], right: Int): Int = {
var r = right
while (r >= 0 && array(r) == 0) r -= 1
r
}
while (i <= z) {
if (array(i) == 0) {
z = findRightMostNonZero(array, z)
swap(array, i, z)
}
if (i <= z) i += 1
}
i
}
def main(args: Array[String]) {
val array = readInput()
println(rearrange(array))
println(array.mkString(" "))
}
}
this solution will work for begining zeros, multiple simultaneous zeros, ending zero like -> {0,1,0,5,0,0,4,0,0}
package me.satyen.code;
public class Integers {
public static int rearrangeInts(int[] arr){
int cnt = -1;
int indxZ = -1;
int indxNZ = -1;
boolean foundZero = false;
for(int i=0; i< arr.length; i++){
//find first zero index first time only.
if(!foundZero && arr[i] == 0){
indxZ = i;
foundZero = true;
}else if (arr[i] != 0){ //find the non zero index
indxNZ = i;
//if we already found zero and we got non zero index then swap
//and increment zero index
if(foundZero){
swap(arr, indxZ++, indxNZ);
}
}
}
return cnt;
}
public static void swap(int[] arr, int indx1, int indx2){
int tmp = arr[indx1];
arr[indx1] = arr[indx2];
arr[indx2] = tmp;
}
public static void main(String[] args){
int[] arr = new int[]{0,1,0,5,0,0,4,0,0};
rearrangeInts(arr);
}
}
int main() {
//int numbers[] = {1,2,0,5,3,0,4,0};
static int numbers[100];
int i,j,n;
int size = sizeof(numbers)/sizeof(int);
scanf("%d", &n);
for (i = 0 ; i < n; i++) {
scanf("%d", &numbers[i]);
}
for (i = 0; i < n; i++) {
printf("%d,",numbers[i]);
}
printf("\n\n");
for (i = 0, j = 0; i < n; i++) {
if (numbers[i] == 0 && numbers[j] == 0)
continue;
if (numbers[i] != 0){
if (numbers[j] == 0) {
numbers[j] = numbers[i];
numbers[i] = 0;
}
j++;
}
}
for (i = 0; i < n; i++) {
printf("%d,",numbers[i]);
}
return 0;
}
int main() {
//int numbers[] = {1,2,0,5,3,0,4,0};
static int numbers[100];
int i,j,n;
int size = sizeof(numbers)/sizeof(int);
scanf("%d", &n);
for (i = 0 ; i < n; i++) {
scanf("%d", &numbers[i]);
}
for (i = 0; i < n; i++) {
printf("%d,",numbers[i]);
}
printf("\n\n");
for (i = 0, j = 0; i < n; i++) {
if (numbers[i] == 0 && numbers[j] == 0)
continue;
if (numbers[i] != 0){
if (numbers[j] == 0) {
numbers[j] = numbers[i];
numbers[i] = 0;
}
j++;
}
}
for (i = 0; i < n; i++) {
printf("%d,",numbers[i]);
}
return 0;
}
- Najat April 08, 2017