首页 > 代码库 > [003] largest_subarray_with_equal_1&0

[003] largest_subarray_with_equal_1&0

[Description] Given an array with only ‘1‘ and ‘0‘, find a largest length sub-array which contains equal number of ‘1‘ and ‘0‘. Return the largest number.

e.g. arr[] = {1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1}

  return : 16

[Thought] Preprocess this array by add 1/-1 to arr[i] while arr[i] is 1/0; find the last position of ‘0‘ as ‘largest1‘; find the farther distance of the same number as ‘largest2‘; return the larger one of ‘largest1‘ and ‘largest2‘.  O(n^2)

[Implementation] C code:

 1 #include<stdio.h> 2  3 int largestSubarray(int str[],int size) 4 { 5         int largest=0; 6         int i,j; 7         str[0]?(str[0]=1):(str[0]=-1); 8         // preprocess. 9         for(i=1;i<size;i++)10         {11                 str[i]?(str[i]=str[i-1]+1):(str[i]=str[i-1]-1);12         }13         // find the last 0‘s position, and find the farther distance of the same numbers.14         for(i=0;i<size;i++)15         {16                 // find the last 0‘s position.17                 if(0 == str[i] && (i+1)>largest)18                 {19                         largest=i+1;20 //                      printf("0:%d\n",largest);21                 }22                 // find the farther distance of the same numbers.23                 for(j=0;j<i;j++)24                 {25                         if(str[i] == str[j] && (i-j)>largest)26                         {27                                 largest=i-j;28 //                              printf("other:%d\n",largest);29                                 break;30                         }31                 }32         }33         return largest;34 }35 36 int main()37 {38         int str[]={1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,0,1,0,1,1};39         int size=sizeof(str)/sizeof(str[0]);40         int i;41 42         printf("Initianl Sequence which size is %d :\n",size);43         for(i=0;i<size;i++)44         {45                 printf("%d, ",str[i]);46         }47         printf("\nlargest:%d\n",largestSubarray(str,size));48 }

 

[003] largest_subarray_with_equal_1&0