有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0相等1大于
最近做的一个面试题:
有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0(相等)、1(大于)、-1(小于),最少调用compare标准函数几次一定能够找出不同的值,请描述具体步骤,并用代码实现,语言不限
思路:
先分成三组 一组三个。每一组三个数相加,其中有一组和其他两个组不一样,然后范围就缩小到这一组,就三个数,然后可以再两两相加,然后分析这三数之间的大小,调用两次就行
之间上代码(方法虽笨,可以实现,希望有好的方法指教!!):
public class ArrayTest2 { public static void main(String[] args) { int[] num = new int[]{2,2,2,2,2,2,1,2,2}; int[] a = new int[]{num[0],num[1],num[2]}; int[] b = new int[]{num[3],num[4],num[5]}; int[] c = new int[]{num[6],num[7],num[8]}; int result = compare(a,b); //说明b里有那个数 if(result == 1){ int[] d = new int[]{num[3]+num[4]}; int[] e = new int[]{num[4]+num[5]}; int result1 = compare(d,e); if(result1 == 0){ System.out.println(num[4]); }else if(result1 == 1){ System.out.println(num[5]); }else { System.out.println(num[3]); } }else if(result == 0){ //说明c里有那个数 int[] f = new int[]{num[6]+num[7]}; int[] g = new int[]{num[7]+num[8]}; int result2 = compare(f,g); if(result2 == 0){ System.out.println(num[7]); }else if(result2 == 1){ System.out.println(num[8]); }else { System.out.println(num[6]); } }else { //说明a里有那个数 int[] h = new int[]{num[0]+num[1]}; int[] i = new int[]{num[1]+num[2]}; int result3 = compare(h,i); if(result3 == 0){ System.out.println(num[1]); }else if(result3 == 1){ System.out.println(num[2]); }else { System.out.println(num[0]); } } } public static int compare(int[] a, int[] b){ if(a.length >= 2 && b.length >= 2){ int sumA = 0; int sumB = 0; for (int x = 0 ; x< a.length ;x++){ sumA += a[x]; } for (int y = 0 ; y < b.length ;y++){ sumB += b[y]; } if(sumA>sumB){ return 1; }else if(sumA==sumB){ return 0; }else { return -1; } }else { if(a[0]>b[0]){ return 1; }else if(a[0]>b[0]){ return 0; }else { return -1; } } } }