tripleUp challenge

Hi,

I am working on below challenge

http://codingbat.com/prob/p137874

Psedo code description of logical approach :
1. Loop throguh given array
2. check if array i th element and adjacent one and then adjacent ones all differ by 1 from before one.
3. if yes return true
4. if no return false

I wrote my code as below

``````public boolean tripleUp(int[] nums) {
boolean result=false;
for(int i=0;i<nums.length-2;i++){
if((nums[i]+1==nums[i+1])&&(nums[i+1]+1==nums[i+2])){
result=true;

}
else{

}

}
return result;
}
``````

I am passing all tests

Expected      Run
tripleUp([1, 4, 5, 6, 2]) → true      true      OK
tripleUp([1, 2, 3]) → true      true      OK
tripleUp([1, 2, 4]) → false      false      OK
tripleUp([1, 2, 4, 5, 7, 6, 5, 6, 7, 6]) → true      true      OK
tripleUp([1, 2, 4, 5, 7, 6, 5, 7, 7, 6]) → false      false      OK
tripleUp([1, 2]) → false      false      OK
tripleUp([1]) → false      false      OK
tripleUp([]) → false      false      OK
tripleUp([10, 9, 8, -100, -99, -98, 100]) → true      true      OK
tripleUp([10, 9, 8, -100, -99, 99, 100]) → false      false      OK
tripleUp([-100, -99, -99, 100, 101, 102]) → true      true      OK
tripleUp([2, 3, 5, 6, 8, 9, 2, 3]) → false      false      OK
other tests
OK

LVL 7
Who is Participating?

Sr. ConsultantCommented:
Its a simple program, cant make more changes to it. However, made few changes that will improve the performance (can be visible when elements are more).

``````public boolean tripleUp(int[] nums) {
int count=nums.length-2;
for(int i=0;i<count;i++) {
if ((nums[i]+1==nums[i+1])&&(nums[i+1]+1==nums[i+2])) {
return true;
}
}
return false;
}
``````
0

Commented:
If the first entry plus 1 is going to be equal to the second entry, then the second entry is equal to the first entry (index 0) plus 1 (index 1) and so each entry is going to be equal to the first entry plus the index (starting from zero).  Consequently you only have to check that each entry is equal to entry 0 plus the index. Thus you only test each entry once, instead of two or more times and you can start the loop at entry 1 instead of zero.
0

Author Commented:
Its a simple program, cant make more changes to it. However, made few changes that will improve the performance (can be visible when elements are more).

difference from my code is removal of else block right.
How it impact performance?

If the first entry plus 1 is going to be equal to the second entry, then the second entry is equal to the first entry (index 0) plus 1 (index 1) and so each entry is going to be equal to the first entry plus the index (starting from zero).  Consequently you only have to check that each entry is equal to entry 0 plus the index. Thus you only test each entry once, instead of two or more times and you can start the loop at entry 1 instead of zero.

if my test case  {1,4,5,6,2}
first entry means 1?
0

IT Business Systems Analyst / Software DeveloperCommented:
difference from my code is removal of else block right.
How it impact performance?

The difference is the removal of else block AND returning true straight away (at line 5) rather than waiting until the end of the loop to return the result. And it is this last point that could improve performance. Imagine if the array had 1 million entries and the first 3 entries were 1, 2, 3. In your code, you have scanned through all 1 million records before you return a result, whereas Amit's code would return the result after the first loop iteration.
0

Author Commented:
Imagine if the array had 1 million entries and the first 3 entries were 1, 2, 3. In your code, you have scanned through all 1 million records before you return a result, whereas Amit's code would return the result after the first loop iteration.

even though my else block empty code scan all 1 million records before returning result. I got it
0

IT Business Systems Analyst / Software DeveloperCommented:
even though my else block empty code scan all 1 million records before returning result. I got it
Yes, but just to be clear, it's nothing really to do with the else block. It is because your code only has a return statement right at the end of the method, ie. the loop must fully complete before your code returns anything.

Whereas, Amit's code has a return statement inside the loop and so it has the possibility of returning from the method BEFORE the loop fully completes.
0

Author Commented:
Yes, but just to be clear, it's nothing really to do with the else block. It is because your code only has a return statement right at the end of the method, ie. the loop must fully complete before your code returns anything.

Whereas, Amit's code has a return statement inside the loop and so it has the possibility of returning from the method BEFORE the loop fully completes.

makes now perfect sense
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.