前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回0相等1大于

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

作者头像
掉发的小王
发布2022-07-11 14:57:58
8620
发布2022-07-11 14:57:58
举报
文章被收录于专栏:小王知识分享小王知识分享

最近做的一个面试题: 有一个整数数组,长度为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.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档