有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0相等1大于

简介: 有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0相等1大于

有一个整数数组,长度为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;
            }
        }
    }
}
相关文章
|
28天前
|
人工智能 算法 C语言
编写函数isprime(int a),用来判断自变量a是否为素数,若是素数,函数返回整数1,否则返回0
通过上述代码和解释,我们实现了一个高效判断素数的C语言函数 `isprime`。该函数结合了基础判断和优化的循环逻辑,确保高效准确地判断给定整数是否为素数。希望本文能帮助你更好地理解和实现素数判断算法。
30 1
|
5月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
6月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
7月前
|
Java
java 数组转字符串 和字符串转int
【4月更文挑战第11天】java 数组转字符串 和字符串转int
105 2
|
7月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
239 2
|
7月前
|
C语言
[C语言][题]两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同。
[C语言][题]两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同。
51 1
|
7月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
43 0
|
7月前
|
存储 算法 Java
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
44 0
|
7月前
|
数据采集 分布式计算 数据处理
Dataphin常见问题之与指定类型int不兼容如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
7月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
188 3

热门文章

最新文章