Adobe Interview Question
Software Engineer / Developers#include<iostream>
using namespace std;
int main()
{
int arr[]={1,0,2,0,3,0,0,4,5,6,7,0,0,0},find,count;
// int arr[]={1,0,2,0,3,0,0,4,5,6,7},find,count;
int i,j;
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
j=0;
if(arr[i] == 0)
{
find=i;
j=i;
count++;
while(arr[j] <= 0)
{
j++;
}
if(j !=sizeof(arr)/sizeof(arr[0])) //for boundary condiation checking
{
arr[find]=arr[j] ;
arr[j]=0;
}
}
}
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
cout<<"element ="<<arr[i]<<"\t"<<endl;
}
#include<iostream>
using namespace std;
int main()
{
int b[] = {0,0,2,0,3,0,0,4,5,6,7,0,0,8};
i = 0; j = 1;
int sizeOfArray = sizeof(b) / sizeof(b[0]);
while(j < sizeOfArray - 1)
{
while(b[i] != 0)
i++;
while(b[j] ==0)
j++;
b[i] = b[j] ;
b[j] = 0;
}
for (int i = 0; i <= 13; i++)
{ cout << b[i] << " ";}
}
static void Main(string[] args)
{
int [] array = {0,0,2,0,3,0,0,4,5,6,7,0,0,8};
int hole = 0;
for (int j = 0; j < array.Length; j++)
{
if (array[j] != 0)
{
array[hole++] = array[j];
array[j] = 0;
}
}
Console.WriteLine("\n After Moving zeroes to end...");
for (int i = 0; i < hole; i++)
Console.Write(array[i].ToString() + ", ");
}
this solution does not work, try it with int [] array = {1,0,0,2,0,3,0,0,4,5,6,7,0,0,8};
this works:
public static void Main(String[] args)
{
int [] array = {1,0,0,2,0,3,0,0,4,5,6,7,0,0,8};
for (int j = 0; j < array.length; j++)
{
if(array [j] == 0)
{
for(int k = j; k < array.length; k++)
{
if(array[k] != 0)
{
array[j] = array[k];
array[k] = 0;
break;
}
}
}
}
for(int i = 0; i < array.length; i++)
System.out.println("" + array[i]);
}
Correction:
static void Main(string[] args)
{
int[] array = { 1, 0, 0, 2, 0, 3, 0, 0, 4, 5, 6, 7, 0, 0, 8 };
int hole = 0;
for (int j = 0; j < array.Length; j++)
{
if (array[j] != 0)
{
int temp = array[hole];
array[hole++] = array[j];
array[j] = temp;
}
}
Console.WriteLine("\n After Moving zeroes to end...");
for (int i = 0; i < array.Length; i++)
Console.Write(array[i].ToString() + ", ");
}
#include<stdlib.h>
#include<stdio.h>
#define SIZE 16
int main()
{
int arr[SIZE]={1,0,0,2,0,3,0,0,4,5,6,7,0,0,8};
int i=0,j=0;
printf("\nInitial Array: ");
for(i=0;i<(SIZE-1);i++)printf(" %d",arr[i]);
for (i=1;i<(SIZE-1);i++)
if(arr[i]!=0)
{
arr[++j]=arr[i];
arr[i]=0;
}
printf("\nFinal Array: ");
for(i=0;i<(SIZE-1);i++)printf(" %d",arr[i]);
system("pause");
}
int main()
{
int arr[]={1,0,2,0,3,0,0,4,5,6,7,0,0,0},move = 0;
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++) {
if(arr[i] == 0) {
move++;
} else if (move > 0) {
arr[i - move] = arr[i];
arr[i] = 0;
}
}
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
cout<<"element =\t"<<arr[i]<<endl;
// complexity O(n)
}
hi
cant we use partition algo in quicksort.
i mean with small modification that all the element whether > or < than 0 must come in left of it.
#include<stdio.h>
void Arrange(int a[], int n)
{
int k = 0;
for(int i = 0; i < n; i++)
{
k = i;
while(a[k] == 0 && k < n)
k++;
if(k == n)
break;
if(i != k)
{
// 0 was encountered
a[i] = a[k];
a[k] = 0;
}
}
}
int main()
{
int a[] = {1,2,0,2,0,3,0,0,0,4,0,0,0,0,0};
int n = sizeof(a)/sizeof(int);
Arrange(a,n);
printf("\n");
for(int i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
return 0;
}
int main()
{
int a[13]={1,0,2,0,3,0,4,5,6,0,0,7,0};
int i=0,j=0;
for(i=0;i<13;i++)
{
j=i;
while(j>=0)
{
if(a[j-1]==0){ a[j-1]=a[j]; a[j]=0; j--;}
else j--;
}
}
for(i=0;i<13;i++)
printf(" %d",a[i]);
return 0;
}
slight change t handle the case where arraye starts with ZEROs
int main()
{
int a[15]={0,0,1,0,2,0,3,0,4,5,6,0,0,7,0};
int i=0,j=0;
//initialize i to the first non zero location.
while(a[i]==0) i++;
for(;i<15;i++)
{
//shift all non zero elements to the left of the array
j=i;
while(j>=0)
{
if(a[j-1]==0){ a[j-1]=a[j]; a[j]=0; j--;}
else j--;
}
}
for(i=0;i<15;i++)
printf(" %d",a[i]);
return 0;
}
Don't u think its very easy!!
- python.c.madhav November 01, 2010int index=-1;//index where the first zero has occured
for(i=0;i<n;i++){
if(!a[i]){
if(index==-1) index =i;
continue;
}
else{
if(index==-1)continue;
else swap(arr[index],arr[i]);
index++;
}
}