Given an array of random numbers and -1 placed in-between, compact that array ie., all the -1s are to be removed and the final output should be the last valid index with the fresh array. For example.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqp3F6vJmZ1c0XGd657RDkMcKA_al3_sXaMe7Yf-zqq94o7R4fuKZ8xgYh1kJ2sBksd1q7n1mJ72SwJWeus8elYwsRivYUyrNaRgxfRwqep7adNP8wXffEKzkMdcqms6rMZ_3CimU8BcM/s640/Input.png)
You should not swap the values just the last valid index along with the array is enough to decipher the not -1 values.
The solution to this problem is seemingly simple and the same has been implemented in Java below.
Cheers!
Bragaadeesh.
3 comments:
Hi,
If more values at the starting are valid, copying the same value to the same location isn't worth.
for(int i=0;i<arr.length;i++){
if(arr[i]!=-1)
arr[k++] = arr[i];
}
This part can be improved by using
for(int i=0;i<arr.length;i++){
if(arr[i]!=-1) {
if ( i != k)
arr[k] = arr[i];
k++;
}
}
Regards,
Mathur
We may do following to recieve exact output as mentioned in examples above, where we must keep -1 in array if they are more in numers than non -1s. I chose to go this way:
int main()
{
int i=0;
int arr[6]= {-1,-1,-1,3,3,3};
printf("The array is as follows: \n");
for(i=0;i<6;i++)
printf("%d\n",arr[i]);
printf("\n\nTime to compact the array\n\n");
int k=0;
for(i=0,k=0;i<6,k<6;i++)
{
if(arr[i]==-1)
{
while(arr[k]==-1 && k<6){
k++;
};
arr[i]=arr[k++];
}
else
{
k++;
}
}
printf("\n\n The last valid index is :%d\n\n", i-1);
printf("The compacted array is as follows: \n");
for(i=0;i<6;i++)
printf("%d\n",arr[i]);
return 0;
}
Regards,
Yogesh
@Yogesh - Nice attempt !
Post a Comment