## Thursday, September 11, 2014

### Hollow Array in Java (Maybe this is best solution)

Maharishi University онлайнаар оюутан элсүүлж авахдаа 3 бодлогын алгоритмыг бичүүлж шалгалт авдаг юм байна. Тэдгээр гурван бодлогын нэгийг нь бодож үзэв. Ихэнх хүмүүс гурван давталтаар шийдсэн байхаар нь нэг давталтаар шийдэв :P

Question: An array is said to be hollow if it contains 3 or more zeros in the middle that are preceded and followed by the same number of non-zero elements. Furthermore, all the zeroes in the array must be in the middle of the array. Write a function named isHollow that accepts an integer array and returns 1 if it is a hollow array, otherwise it returns 0.

If you are programming in Java or C#, the function signature is int isHollow(int[ ] a)

If you are programming in C or C++, the function signature is int isHollow(int a[ ], int len) where len is the number of elements in the array

Examples:

 if the input array is is hollow? reason {1,2,0,0,0,3,4} yes 2 non-zeros precede and follow 3 zeros in the middle {1,1,1,1,0,0,0,0,0,2,1,2,18} yes 4 non-zeros precede and follow the 5 zeros in the middle {1, 2, 0, 0, 3, 4} no There are only 2 zeroes in the middle; at least 3 are required {1,2,0,0,0,3,4,5} no The number of preceding non-zeros(2) is not equal to the number of following non-zeros(3) {3,8,3,0,0,0,3,3} no The number of preceding non-zeros(3) is not equal to the number of following non-zeros(2) {1,2,0,0,0,3,4,0} no Not all zeros are in the middle {0,1,2,0,0,0,3,4} no Not all zeros are in the middle {0,0,0} yes The number of preceding non-zeros is 0 which equals the number of following non-zeros. And there are three zeros "in the middle".

Hint: Write three loops. The first counts the number of preceding non-zeros. The second counts the number of zeros in the middle. The third counts the number of following non-zeros. Then analyze the results.

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49``` ```public class First { public static void main(String[] args) { System.out.println(isHollow(new int[] {1,2,0,0,0,3,4})); System.out.println(isHollow(new int[] {1,1,1,1,0,0,0,0,0,2,1,2,18})); System.out.println(isHollow(new int[] {1, 2, 0, 0, 3, 4})); System.out.println(isHollow(new int[] {1,2,0,0,0,3,4,5})); System.out.println(isHollow(new int[] {3,8,3,0,0,0,3,3})); System.out.println(isHollow(new int[] {1,2,0,0,0,3,4,0})); System.out.println(isHollow(new int[] {0,1,2,0,0,0,3,4})); System.out.println(isHollow(new int[] {0,0,0})); } static int isHollow(int[] a) { int count=a.length; int zerocount=0; int i; int j; int istart; int jstart; if(count%2==0){ istart=(count/2)-1; jstart=count/2; }else{ istart=count/2; jstart=count/2; } for(i=istart, j=jstart; i>=0; i--, j++){ if(a[i]==0 && a[j]==0) zerocount++; else if(a[i]!=0 && a[j]!=0){ break; }else{ zerocount=0; break; } } if(zerocount>1) return 1; else return 0; } } ```