Solved

zeroFront challenge

Posted on 2016-08-14
7
70 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
Comment Utility
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
Comment Utility
understood now. let me try
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
Comment Utility
OK
0
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 
LVL 7

Author Comment

by:gudii9
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
Looks OK to me, maybe use len in the for loop instead of nums.lenght
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
This is about my first experience with programming Arduino.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

772 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now