StreakPeaked· Practice

ExamsGATETechnical

Consider an array X that contains n positive integers. A subarray of X is defined to be a sequence of array locations with consecutive indices. The C code snippet given below has been written to compute the length of the longest subarray of X that contains at most two distinct integers. The code has two missing expressions labelled (P) and (Q). int first=0, second=0, len1=0, len2=0, maxlen=0; for (int i=0; i < n; i++) { if (X[i] == first) { len2++; } else if (X[i] == second) { len2++; len1 = (P); second = first; } else { len2 = (Q); len1 = 1; second = first; } if (len2 > maxlen) { maxlen = len2; } first = X[i]; } Which one of the following options gives the CORRECT missing expressions? (Hint: At the end of the i-th iteration, the value of len1 is the length of the longest subarray ending with X[i] that contains all equal values, and len2 is the length of the longest subarray ending with X[i] that contains at most two distinct values.)

  1. len1+1; len2+1
  2. 1; len1+1
  3. 1; len2+1
  4. len2+1; len1+1

Correct answer: 1; len1+1

Solution

The correct expressions are '1' for (P) because it resets the count of the new distinct integer, and 'len1+1' for (Q) because it adds the length of the previous longest subarray of the first distinct integer to the current count, effectively extending the subarray to include the new distinct integer.

Related GATE Technical questions

⚔️ Practice GATE Technical free + battle 1v1 →