patternjavaModerate
Find the maximum number of consecutive zeros in an array
Viewed 0 times
zerosnumberthemaximumarrayfindconsecutive
Problem
Question: To find the maximum number of consecutive zeros in a given
array.
Example:
Input: \${1, 2, 0, 0, 2, 4, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0}\$
Output: "Maximum number of consecutive zeros : 6"
Here is what I've come up with:
Is the logic correct? Or can it be done via a simple approach?
array.
Example:
Input: \${1, 2, 0, 0, 2, 4, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0}\$
Output: "Maximum number of consecutive zeros : 6"
Here is what I've come up with:
public class ZeroSeriesLength {
public static void main(String[] args) {
int[] values = {1, 2, 0, 0, 2, 4, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0};
int maxLength = 0;
int tempLength = 0;
for (int i = 0; i maxLength) {
maxLength = tempLength;
}
}
System.out.println("Maximum number of consecutive zeros : " + maxLength);
}
}Is the logic correct? Or can it be done via a simple approach?
Solution
Just a few short comments on your code:
Separation of concerns:
You should separate functionality into different parts. Currently your main method does everything. For small applications like this, that may not be a problem, but as soon as you have larger applications, it becomes more and more unpractical.
You should thus extract your "logic" into a method:
Now if you wanted to not count zeros, but twos, you could simply modify the code to the following:
This also makes your main-method more readable:
Naming:
Very nice, a compliment. Your variable names are short, clear, descriptive and follow Java conventions (
Separation of concerns:
You should separate functionality into different parts. Currently your main method does everything. For small applications like this, that may not be a problem, but as soon as you have larger applications, it becomes more and more unpractical.
You should thus extract your "logic" into a method:
private static int countSuccessiveZeros(int[] values) {
int maxLength = 0;
int tempLength = 0;
//....
// Looping here
return maxLength;
}Now if you wanted to not count zeros, but twos, you could simply modify the code to the following:
private static int countSuccessive(int[] values, int target) {
int maxLength = 0;
int tempLength = 0;
//Your loop here, instead of 0 use target to compare
return maxLength;
}This also makes your main-method more readable:
public static void main(String[] args) {
int[] values = {1, 2, 0, 0, 2, 4, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0};
int successiveZeros = countSuccessive(values, 0);
System.out.println("Maximum number of consecutive zeros : " + successiveZeros);
}Naming:
Very nice, a compliment. Your variable names are short, clear, descriptive and follow Java conventions (
camelCase). Keep it up ;)Code Snippets
private static int countSuccessiveZeros(int[] values) {
int maxLength = 0;
int tempLength = 0;
//....
// Looping here
return maxLength;
}private static int countSuccessive(int[] values, int target) {
int maxLength = 0;
int tempLength = 0;
//Your loop here, instead of 0 use target to compare
return maxLength;
}public static void main(String[] args) {
int[] values = {1, 2, 0, 0, 2, 4, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0};
int successiveZeros = countSuccessive(values, 0);
System.out.println("Maximum number of consecutive zeros : " + successiveZeros);
}Context
StackExchange Code Review Q#49610, answer score: 19
Revisions (0)
No revisions yet.