JAVA面试题--两个正序排序的数组,求合并后的第K个(非算法)

it2024-07-03  42

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; }
最新回复(0)