Saturday, December 4, 2021

Interview coding question: Find a pair from two sorted array that sum is nearest to one number

 Q. pair from two sorted array having one element from each and sum is nearest to number X. Solve in O(n) time.


Solution:

let A1=[3,5,8,10,15];
let A2=[0,1,6,20,34];
let X=17;
let diff=Infinity;
let l=0,r=A2.length-1;
let p1=-1,p2=-1;
while(true)
{
if(A1[l]+A2[r]==X)
{
p1=l;
p2=r;
break;
}
let diff_tmp=Math.abs(A1[l]+A2[r]-X);
if(diff_tmp<diff)
{
console.log(`diff = ${diff}`);
p1=l;
p2=r;
diff=diff_tmp;
}
if(A1[l]+A2[r]<X || r<0)
{
l++;
}
else if(A1[l]+A2[r]>X || l>=A1.length)
{
r--;
}
if(l>=A1.length && r<0)
{
break;
}
}
console.log(`p1=${p1} and p2=${p2}`);
console.log(`p1v=${A1[p1]} and p2v=${A2[p2]}`);

No comments:

Post a Comment