您的位置:首页 > 其它

进军硅谷 数位重组

2016-07-12 15:37 399 查看
数组面试题10:

题目

给定两个数组表示的整数,比如x = 1234={1,2,3,4},y=2410={2,4,1,0},返回第一个整数的重组后的值最接近第二个整数,并且要大于第二个整数。假设两个整数的数组大小相同,并且肯定能够找到符合答案的数,例如输入{1,2,3,4},{2,4,1,0},返回{2,4,1,3}。

题解:

此题可以从y的高位开始,挑一个和该位数字相等或更大的数字,直到到达数组的尾部。为了方便从x里挑出一个与y对应的相等的或更大的数字,需要

1)将x数字进行排序;

2)使用一个一维数组记录x数字的使用情况,用boolean类型来表示。

public static int[] getClosestBigger(int[] x,int[] y)
{
int length = x.length;
int[] res = new int[length];
Arrays.sort(x);
int i = 0,k = 0;
boolean[] used = new boolean[length];
for(int j = 0; j < length; j++)
{
i = 0;
while(i < length && (used[i] || x[i] < y[j])) //得判断这个i的使用情况,是否已经使用过或者是此值比y值要小
i++;
res[k++] = x[i];
used[i] = true;
if(i == length - 1)
continue; //这里是continue,书上写错了
if(x[i] > y[j]) //如果发现,某个数已经比y的某个位置的数要大了,那么直接复制数字后面的值即可
{
for(i = 0; i < length; i++)
{
if(!used[i])
res[k++] = x[i];
}
break;
}
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: