My 2 pointer approach
i= j= 0 ;
while ( i< n&& j< m)
{
if ( a[ i] - k<= b[ j] && b[ j] <= a[ i] + k)
{
j++ ;
i++ ;
ans++ ; //jth apartment given to i applicant
}
else if ( b[ j] <= a[ i] - k)
{
j++ ; //b[j] cannot be given to anybody from i to n-1
}
else if ( b[ j] >= a[ i] + k)
{
i++ ; //a[i] cannot get any apartment from b[j] to m-1
//and j 0 to j-1 are already given
}
}
TXkgMiBwb2ludGVyIGFwcHJvYWNoCgppPWo9MDsKd2hpbGUoaTxuJiZqPG0pCnsKICBpZihhW2ldLWs8PWJbal0mJmJbal08PWFbaV0raykKICB7CiAgICAgIGorKzsKICAgICAgaSsrOwogICAgICBhbnMrKzsvL2p0aCBhcGFydG1lbnQgZ2l2ZW4gdG8gaSBhcHBsaWNhbnQKICB9CiAgZWxzZSBpZihiW2pdPD1hW2ldLWspCiAgewogICAgICBqKys7Ly9iW2pdIGNhbm5vdCBiZSBnaXZlbiB0byBhbnlib2R5IGZyb20gaSB0byBuLTEKICB9CiAgZWxzZSBpZihiW2pdPj1hW2ldK2spCiAgewogICAgICBpKys7Ly9hW2ldIGNhbm5vdCBnZXQgYW55IGFwYXJ0bWVudCBmcm9tIGJbal0gdG8gbS0xCiAgICAgIC8vYW5kIGogMCB0byBqLTEgYXJlIGFscmVhZHkgZ2l2ZW4KICB9Cn0=