Advertisement
yarin0600

Untitled

Nov 21st, 2023
726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1.  
  2. int longestSubArrayWithContinousOnesAndZeroesEqually(int *arr, int n)
  3. {
  4.    int longest = 0;
  5.    int startZeroes, endZeroes, startOnes, endOnes;
  6.    int lengthZeroes, lengthOnes;
  7.  
  8.    startZeroes = endZeroes = startOnes = endOnes = 0;
  9.    lengthZeroes = lengthOnes = 0;
  10.  
  11.    int i = 0;
  12.    for (; i < n; ++i)
  13.    {
  14.       if (arr[i] == 0)
  15.       {
  16.          startZeroes = endOnes;
  17.          while (i < n && arr[i] == 0)
  18.             ++i;
  19.          endZeroes = i;
  20.          lengthZeroes = endZeroes - startZeroes;
  21.          if (i >= n)
  22.          {
  23.             endZeroes = n - 1;
  24.             break;
  25.          }
  26.       }
  27.       if (arr[i] == 1)
  28.       {
  29.          startOnes = endZeroes;
  30.          while (i < n && arr[i] == 1)
  31.             ++i;
  32.          endOnes = i;
  33.          lengthOnes = endOnes - startOnes;
  34.          if (i >= n)
  35.          {
  36.             endOnes = n - 1;
  37.             break;
  38.          }
  39.       }
  40.       longest = max(longest, min(lengthZeroes, lengthOnes) * 2);
  41.    }
  42.    longest = max(longest, min(lengthZeroes, lengthOnes) * 2);
  43.  
  44.    return longest;
  45. }
  46.  
  47. int max(int a, int b)
  48. {
  49.    return a > b ? a : b;
  50. }
  51.  
  52. int min(int a, int b)
  53. {
  54.    return a < b ? a : b;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement