Saturday, December 25, 2021

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]}`);

Wednesday, December 1, 2021

Interview coding questions: Implement 2-way merge sort using array iteration only

 Answer:

let inputArray=[2,5,8,1,100,3,0,11,26,1,133,6];
let A=inputArray;
let B=Array(A.length);
let S=A;
let T=A;
let l=A.length;
topmost:for(let s=1;;)
{
if(Math.log2(s)%2==0)
{
console.log("even");
S=A;
T=B;
}
else
{
console.log("odd");
S=B;
T=A;
}
console.log("souce="+S);
console.log("target="+T);

//break;
for(let i=0;i<l;)
{
console.log(`i==${i} and s==${s}`);
let p1=i;
let p2=i+s;
let k=0;
console.log(`p1=${p1} p2=${p2}`);
for(let k=0;;)
{
console.log(`k=${k}, p1=${p1} p2=${p2}`);
if(p2 <l && (p2 < i+2*s) && (S[p1]>S[p2] || p1==i+s))
{
T[i+k]=S[p2];
p2=p2+1;
}
else
{
T[i+k]=S[p1];
p1=p1+1;
}
k++;
if(i+k>=l || k>=2*s)
{
break;
}
}
i=i+2*s;
console.log("Target="+T);
//break topmost;
}
s=s*2;
if(s>=l)
{
break;
}
}
A=T;
console.log(A);