最近做的一个面试题: 有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0(相等)、1(大于)、-1(小于),最少调用compare标准函数几次一定能够找出不同的值,请描述具体步骤,并用代码实现,语言不限 思路: 先分成三组 一组三个。每一组三个数相加,其中有一组和其他两个组不一样,然后范围就缩小到这一组,就三个数,然后可以再两两相加,然后分析这三数之间的大小,调用两次就行 之间上代码(方法虽笨,可以实现,希望有好的方法指教!!):
代码语言:javascript复制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;
}
}
}
}
Q.E.D.