• Status: Solved
• Priority: Medium
• Security: Public
• Views: 437

# MaxSpan challenge

Hi,

I am working on below challenge

http://codingbat.com/prob/p189576
Array-3 > maxSpan
prev  |  next  |  chance
Consider the leftmost and righmost appearances of some value in an array. We'll say that the "span" is the number of elements between the two inclusive. A single value has a span of 1. Returns the largest span found in the given array. (Efficiency is not a priority.)

maxSpan([1, 2, 1, 1, 3]) → 4//why 4??
maxSpan([1, 4, 2, 1, 4, 1, 4]) → 6//why 6?
maxSpan([1, 4, 2, 1, 4, 4, 4]) → 6

i have not understood above problem description?
0
gudii9
• 5
• 4
1 Solution

First example: the number 1 has the largest span (1,2,1,1). 4 wide.

Second example: numbers 1 and 4 have the largest span.

Third example: the number 4 has the largest span.
0

Author Commented:
i see the point now
0

OK ;)
0

Author Commented:
maxSpan([1, 2, 1, 1, 3]) → 4

how above is 4 it looks 3 to me as there are 3 ones there?
0

The '4' span is:
1, 2, 1, 1
0

Author Commented:
The '4' span is:
1, 2, 1, 1
'

i got it.

Not getting idea on psedo code for this challenge?
0

Author Commented:
can i write solution with simgle loop?
psedo code:

0. loop through array
1. find left most appearance of a number and note the index
2. find if that number exist within the loop again from backwards
3. if yes find the index of that.
4. find the span length which is difference of end index- start index
5. return span length
0

Author Commented:
``````public int maxSpan(int[] nums) {
int span=1;
int counter=0;
if (nums.length>0) {
for (int i = 0; i < nums.length; i++) {
for (int k = nums.length-1; k >0; k--) {
if(nums[k]==nums[i]){
counter=k-i+1;
if(counter>span){
span=counter;
}

}
}
}
}

else {
span=0;

}
return span;

}

``````

above pass all tests
Expected      Run
maxSpan([1, 2, 1, 1, 3]) → 4      4      OK
maxSpan([1, 4, 2, 1, 4, 1, 4]) → 6      6      OK
maxSpan([1, 4, 2, 1, 4, 4, 4]) → 6      6      OK
maxSpan([3, 3, 3]) → 3      3      OK
maxSpan([3, 9, 3]) → 3      3      OK
maxSpan([3, 9, 9]) → 2      2      OK
maxSpan([3, 9]) → 1      1      OK
maxSpan([3, 3]) → 2      2      OK
maxSpan([]) → 0      0      OK
maxSpan([1]) → 1      1      OK
other tests
OK

``````public class MaxSpan {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ar={1, 2, 1, 1, 3};
System.out.println("value is"+maxSpan(ar));
}

public static int maxSpan(int[] nums) {
int span=1;
int counter=0;
if (nums.length>0) {
for (int i = 0; i < nums.length; i++) {
for (int k = nums.length-1; k >0; k--) {
if(nums[k]==nums[i]){
counter=k-i+1;
if(counter>span){
span=counter;
}

}
}
}
}

else {
span=0;

}
return span;

}
}
``````
value is4

any improvement, optimization, refinement to my code?
0

Passes all test - great! Efficiency was not a priority for this one so I'd keep it like this  ;)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.