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