You are on page 1of 1

void missingValues(int* data, int n, int a, int b){

int N = (b-a+1) - n;
int front = data[0] - a;
int back = b - data[n-1];

cout << "Missing numbers: ";


if(data[0] - b > 0 || a - data[n-1] > 0){
for(int i = 0; i < b-a+1; i++)
cout << a + i << " ";
return;
}

// First missing value


for(int i = 0; i < front; i++)
cout << a + i << " ";
int foundNum = front;

// Middle missing values


int mid, diff;
int left = 0, right = n;
while(foundNum < N - back){ // foundNum includes start.
mid = (left + right) / 2;
diff = data[mid] - data[mid-1];

if(data[mid] == (a+mid) + foundNum)


left = mid + 1;

else if(data[mid] - (a+mid) - foundNum != diff-1)


right = mid - 1;

else{
for(int i = 0; i < diff-1; i++)
cout << (a+mid) + foundNum + i << " ";
foundNum += diff-1;
left = mid + 1;
right = n-1;
right = mid - 1;
}
}

// Tail missing values


for(int i = 0; i < back; i++)
cout << data[n-1] + (i+1) << " ";
}

You might also like