Deepeshkumar - 1 year ago 79
Java Question

# How to solve this (http://codingbat.com/prob/p168357) 'codingbat' example efficiently?

I came across this problem on codingbat.com : Problem

Problem:

Given an array of ints, return true if the array contains two 7's next to each other, or there are two 7's separated by one element, such as with {7, 1, 7}.

has77([1, 7, 7]) → true

has77([1, 7, 1, 7]) → true

has77([1, 7, 1, 1, 7]) → false

I solved it but my approach is not that efficient. The code of my solution is large compared to the problem. Can anybody show me how to solve this problem in a smart way.

My code:

``````public boolean has77(int[] nums) {
int i = 0;
int arraylength = 0;
while(i != nums.length){
if(nums[i] == 7){
arraylength++;
}
i++;
}
int[] sevens = new int[arraylength];
if(arraylength == 0){
return false;
}
i =0;
int j = 0;
while(i != nums.length){
if(nums[i] == 7){
sevens[j] = i;
j++;
}
i++;
}
i = 0;
while(i != arraylength-1){
if(sevens[i+1] - sevens[i]==1 || (sevens[i+1]- sevens[i]==2)){
return true;
}
i++;
}
return false;
}
``````

More efficiently solution: Only iterate the array once. If current element is a 7, and previous element or the one before it is also a 7, return `true`.