古典的なGoogleアルゴリズムの問題
これはgoogleの比較的古典的なアルゴリズムの問題で、テーマは:すでに2つの並べ替えられた配列を見つけて、2つの数を組み合わせた中間の大きい数字を見つけます.アルゴリズムの複雑さはできるだけ低いことが要求される.例えば、x配列:1,7,9,10,30 y配列:3,5,8,11は中間大数:8
次は自分で考えたアルゴリズムです.
次は自分で考えたアルゴリズムです.
public class GetMiddleValue
{
public static void main(String[] args)
{
int[] a = {1, 7, 9, 10, 30};
int[] b = {3, 5, 8, 11};
getMiddleValue(a, b);
getMiddleValue2(a, b);
}
public static void getMiddleValue(int[] a, int[] b)
{
int n = (a.length + b.length + 1)/2;
int i = 0;
int j = 0;
int sum = 0;
int middle = 0;
boolean flag = true;
while(i < a.length && j < b.length)
{
if(a[i] <= b[j])
{
i++;
middle = a[i-1];
}
else
{
j++;
middle = b[j-1];
}
sum++;
if(sum == n)
{
System.out.println("The middle number is : " + middle);
flag = false;
break;
}
}
if(flag)
{
if(i == a.length)
{
while(sum < n)
{
j++;
sum++;
}
middle = b[j-1];
}
else
{
while(sum < n)
{
i++;
sum++;
}
middle = a[i-1];
}
System.out.println("The middle number is : " + middle);
}
}
public static void getMiddleValue2(int[] a, int[] b)
{
int n = (a.length + b.length + 1)/2;
int i = 0;
int j = 0;
int middle = 0;
while(i < a.length && j < b.length && n > 0)
{
if(a[i] <= b[j])
{
i++;
middle = a[i-1];
}
else
{
j++;
middle = b[j-1];
}
n--;
}
if(n == 0)
{
System.out.println("The middle number is : " + middle);
}
else
{
if(i == a.length)
{
while(n > 0)
{
j++;
n--;
}
middle = b[j-1];
}
else
{
while(n > 0)
{
i++;
n--;
}
middle = a[i-1];
}
System.out.println("The middle number is : " + middle); }
}
}
//
// , 9 , 5
// , 10 , 5