JAVA面试题--两个正序排序的数组,求合并后的第K个(非算法)
程序员文章站
2024-03-16 13:03:28
...
JAVA面试
群里大佬们讨论的面试题,不知道这样是不是答案,记录一下,感觉符合任何数组,但是没有用正序排序这个点,所以不知道是不是最优解,有兴趣的朋友可以互相探讨一下,题目如下:
两个正序排序的数组,求合并后的第K个。两个数组内元素没有 0,找不到第 K 个数可以返回 0。
例如:数组1–》[1, 13, 16, 20],数组2–》[2, 8, 12, 27],第K=5个数为13
=注意=
要求:
1、不要申请额外的空间,比如:数组、List、Set、Map;变量定义的是可以;
2、不要使用java的sort相关函数,当然也不要自己手写冒泡排序,本题不是考察排序算法;
3、需要写单元测试,写在 Code1_Test 内;
4、穷举想到的测试边界case,而不仅仅是题目中示例的case;
// An highlighted block
public static void main(String[] args) {
int[] s1 = new int[4];
int[] s2 = new int[4];
s1[0] = 1;
s1[1] = 13;
s1[2] = 16;
s1[3] = 20;
s2[0] = 2;
s2[1] = 8;
s2[2] = 12;
s2[3] = 27;
for (int i = 1; i < 9; i++) {
System.out.println(i+"结果:"+find(i,s1,s2));
}
}
private static int newFind(int k, int[] a, int[] b) {
int al = a.length;
int bl = b.length;
int kval = 0;
int val = 0;//每一个数组的值(第一次循环)
int ab = 0;//每一个数组的值(第二次循环)
for (int i = 0; i < (al+bl); i++) {
if(i<al) {
val = a[i];
}else {
val = b[i-al];
}
int bigger = 0;//有几个数比K的值大
int smaller = 0;//有几个数比K的值小
int equal = 0;//相等的数有几个
for (int j = 0; j < (al+bl); j++) {
if(j<al) {
ab = a[j];
}else {
ab = b[j-al];
}
if(val>ab) {
smaller++;
}else if(val<ab){
bigger++;
}else {
equal++;
}
}
//System.out.println("k="+k+","+val+"的比较结果:smaller="+smaller+",bigger="+bigger+",equal="+equal);
if(0<k-smaller&&k-smaller<=equal) {
kval = val;
}
}
return kval;
}
下一篇: 删除数组重复元素