Solved

zeroFront challenge

Posted on 2016-08-14
7
95 Views
Last Modified: 2016-08-17
Hi,

I am working on below challenge

http://codingbat.com/prob/p193753

My psuedo code of the logic is
1. Loop through given array
2. check if the given element is zero.
3. if true bring to front.
4. else keep as it is.
5. return the modified array


I wrote my code as below
public int[] zeroFront(int[] nums) {
   for(int i=1;i<nums.length;i++){
     if(nums[i]==0){
       nums[0]=0;//check other elements till end and bring to front if 0
     }
     else{}
     
   }
  return nums;
}

Open in new window





I am not passing all tests
Expected      Run            
zeroFront([1, 0, 0, 1]) → [0, 0, 1, 1]      [0, 0, 0, 1]      X      
zeroFront([0, 1, 1, 0, 1]) → [0, 0, 1, 1, 1]      [0, 1, 1, 0, 1]      X      
zeroFront([1, 0]) → [0, 1]      [0, 0]      X      
zeroFront([0, 1]) → [0, 1]      [0, 1]      OK      
zeroFront([1, 1, 1, 0]) → [0, 1, 1, 1]      [0, 1, 1, 0]      X      
zeroFront([2, 2, 2, 2]) → [2, 2, 2, 2]      [2, 2, 2, 2]      OK      
zeroFront([0, 0, 1, 0]) → [0, 0, 0, 1]      [0, 0, 1, 0]      X      
zeroFront([-1, 0, 0, -1, 0]) → [0, 0, 0, -1, -1]      [0, 0, 0, -1, 0]      X      
zeroFront([0, -3, 0, -3]) → [0, 0, -3, -3]      [0, -3, 0, -3]      X      
zeroFront([]) → []      []      OK      
zeroFront([9, 9, 0, 9, 0, 9]) → [0, 0, 9, 9, 9, 9]      [0, 9, 0, 9, 0, 9]      X      
other tests
X
How to improve my design, approach, code? please advise
0
Comment
Question by:gudii9
  • 4
  • 3
7 Comments
 
LVL 37

Accepted Solution

by:
Gerwin Jansen earned 500 total points
ID: 41756288
You should keep track of the amount of zero's you've found. Exchange a 0 found with the position in the array where you've found one.

So if you start with 1, 0, 1, 1, 0, 1 the array changes like this:

0,1,1,1,0,1 (one 0 found)
0,0,1,1,1,1 (two 0 found)
0
 
LVL 7

Author Comment

by:gudii9
ID: 41756480
understood now. let me try
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 41757049
OK
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 7

Author Comment

by:gudii9
ID: 41758461
So if you start with 1, 0, 1, 1, 0, 1 the array changes like this:

0,1,1,1,0,1 (one 0 found)
i got above part not below part?
0,0,1,1,1,1 (two 0 found)
please advise

how to modify my psuedo code?
My psuedo code of the logic is
1. Loop through given array
2. check if the given element is zero.
3. if true bring to front.
4. else keep as it is.
5. return the modified array
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 41758484
Your pseudo code 3 - you say "bring to front", I mean "exchange 0 found with current position" - in essence the same. As long as you move the non zero number to the place where you've found a 0 then it's OK.

Like this:

1, 0, 1, 1, 0, 1 (start, my counter is 0)
0, 1, 1, 1, 0, 1 (one 0 found, my counter is 1)
0, 0, 1, 1, 1, 1 (two 0 found, my counter is 2)
0
 
LVL 7

Author Comment

by:gudii9
ID: 41759640
public int[] zeroFront(int[] nums) {
  int len=nums.length;
		int[] arr=new int[len];
		int front=0;
		int back=len-1;
		  for(int i=0;i<nums.length;i++){		    
		    if(nums[i]%2==0){	
		    	arr[front]=nums[i];
		    	front++;
		    	
		  }
		  else {
			  arr[back]=nums[i];
		    	back--;
		  }
		  }
		  return arr;
  
}




		

Open in new window


i just followed approach similar to evenOdd challenge and passing all tests.
Expected      Run            
zeroFront([1, 0, 0, 1]) → [0, 0, 1, 1]      [0, 0, 1, 1]      OK      
zeroFront([0, 1, 1, 0, 1]) → [0, 0, 1, 1, 1]      [0, 0, 1, 1, 1]      OK      
zeroFront([1, 0]) → [0, 1]      [0, 1]      OK      
zeroFront([0, 1]) → [0, 1]      [0, 1]      OK      
zeroFront([1, 1, 1, 0]) → [0, 1, 1, 1]      [0, 1, 1, 1]      OK      
zeroFront([2, 2, 2, 2]) → [2, 2, 2, 2]      [2, 2, 2, 2]      OK      
zeroFront([0, 0, 1, 0]) → [0, 0, 0, 1]      [0, 0, 0, 1]      OK      
zeroFront([-1, 0, 0, -1, 0]) → [0, 0, 0, -1, -1]      [0, 0, 0, -1, -1]      OK      
zeroFront([0, -3, 0, -3]) → [0, 0, -3, -3]      [0, 0, -3, -3]      OK      
zeroFront([]) → []      []      OK      
zeroFront([9, 9, 0, 9, 0, 9]) → [0, 0, 9, 9, 9, 9]      [0, 0, 9, 9, 9, 9]      OK      
other tests
OK

any improvement, modification, optimization to above code?
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 41760126
Looks OK to me, maybe use len in the for loop instead of nums.lenght
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
V.simple question about Android packages and libraries 1 19
diffSum example 4 36
difference of if loops 23 49
mysql jsp example issue 32 32
A short article about problems I had with the new location API and permissions in Marshmallow
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

806 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question