【百度视频面试题20201229】给你两个整数组成的数组,请返回打印出那个比较大的数组的数,组成的新数组

这是一个2020年12月29日百度视频面试题目,要求用Java编写代码,找出两个整数数组中较大数组的元素。解题思路包括确定哪个数组更大,遍历较大数组并与较小数组的最大值比较,最后使用ArrayList添加较大数值。代码可读性较强,但存在优化空间,如减少遍历次数和利用边界条件简化逻辑。
摘要由CSDN通过智能技术生成

2020年12月29日,下午14点,我面试了一次百度。

【百度视频面试题】给你两个整数组成的数组,请返回打印出那个比较大的数组的数,组成的新数组

array1={1,2,3,4,5,6}

array2={2,3,4}

answer={5,6} 

请使用java语言编写给出答案

 Java中数组获取最大值

实现思路:

1、先确定两个数组,哪一个比较大?获取到各自最大的数值。

2、遍历大的那个数组,和比较小的数组最大的值(矮子里的将军数)比较。

3、分类讨论情况,并借助可变长数组ArrayList类的add方法添加,上个步骤遍历过程中,比较大的那个数(它当然来自更大的数组)

package cn.edu.bjut;

import java.util.ArrayList;


public class baiduTest {

    public static void main(String[] args) {
        // 准备2个整型数组
        Integer[] array1 = {1, 2, 3, 4, 5, 6, 16, 27, 29, 25};
        Integer[] array2 = {8, 9, 11, 14};
        // 求取最大值
        Integer a1 = new Integer(0);
        int i;
        for (i = 0; i < array1.length; i++) {
            //把比较大的值付给容器
            if (array1[i] >= a1) {
                a1 = array1[i];
            }
        }
        // 求取最大值
        Integer a2 = new Integer(0);
        int j;
        for (j = 0; j < array2.length; j++) {
            //把比较大的值付给容器
            if (array2[j] >= a2) {
                a2 = array2[j];
            }
        }
        //使用可变长数组的add方法
        ArrayList list = new ArrayList();
        if (a1 >= a2) {
            //分类讨论情况1
            for (i = 0; i < array1.length; i++) {
                //把比较大的值付给容器
                if (array1[i] >= a2) {

                    list.add(array1[i]);
                }
            }
        } else {
            //分类讨论情况2
            for (i = 0; i < array2.length; i++) {
                //把比较大的值付给容器
                if (array2[i] >= a1) {

                    list.add(array2[i]);
                }
            }
        }
        System.out.println(list);


    }
}

 

水平就不要吐槽我了,此处是为了引出改进优化。当前程序的写法,可读性强,但是比较啰嗦。

遍历数组的过程,在本代码段里重复了4次,其实可以封装成一个成员方法。

并且在第三步骤分类讨论时候,可以先排除a1=a2的边界值情况,直接返回一个空数组或者提示信息,减少时间开销。

Java条件语句之多重 if

package cn.edu.bjut;

import java.util.ArrayList;

/**
 * 日期:2020年12月31日
 * array1={1,2,3,4,5,6}
 * array2={2,3,4}
 * answer={5,6}
 * 版本:V2
 */
public class baiduTest1 {

    public static void main(String[] args) {
        // 准备2个整型数组
        Integer[] array1 = {1, 2, 3, 4, 5, 6, 16, 27, 29, 25};
        Integer[] array2 = {8, 9, 11, 14, 29};
        // 求取最大值
        Integer a1 = new Integer(0);
        int i;
        for (i = 0; i < array1.length; i++) {
            //把比较大的值付给容器
            if (array1[i] > a1) {
                a1 = array1[i];
            }
        }
        // 求取最大值
        Integer a2 = new Integer(0);
        int j;
        for (j = 0; j < array2.length; j++) {
            //把比较大的值付给容器
            if (array2[j] > a2) {
                a2 = array2[j];
            }
        }
        //使用可变长数组的add方法
        ArrayList list = new ArrayList();
        if (a1.equals(a2)) {
            //分类讨论情况3
            System.out.println("两个数组的MAX值一样哦");


        } else if (a1 > a2) {
            // a1 > a2
            //分类讨论情况1
            for (i = 0; i < array1.length; i++) {
                //把比较大的值付给容器
                if (array1[i] > a2) {

                    list.add(array1[i]);
                }
            }

        } else {

            //a2 > a1
            //分类讨论情况2
            for (i = 0; i < array2.length; i++) {
                //把比较大的值付给容器
                if (array2[i] > a1) {

                    list.add(array2[i]);
                }
            }

        }

        System.out.println(list);

    }
}

相比于版本V1的代码段,现在层次更清晰,运算更快。使用了java的【.equals()】方法,显得更高级。

这段代码还有继续优化的空间,比如在作遍历比较的存储最大值的变量,可以直接使用array[0]这样赋值即可。

package cn.edu.bjut;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 日期:2020年12月31日
 * array1={1,2,3,4,5,6}
 * array2={2,3,4}
 * answer={5,6}
 * 版本:V3
 */
public class baiduTest2 {

    public static void main(String[] args) {
        // 准备2个整型数组
        Integer[] array1 = {1, 2, 3, 4, 5, 6, 16, 27, 29, 25};
        Integer[] array2 = {8, 9, 11, 14, 29};

        // 把整型数组转换成list集合
        List<Integer> list1 =new ArrayList<Integer>();
        List<Integer> list2 =new ArrayList<Integer>();
        if(array1!=null && array2!=null){
            // 调用Arrays.asList()方法把数组转换成线性集合
            list1 =  Arrays.asList(array1);
            list2 =  Arrays.asList(array1);
        }



        // 求取最大值
        Integer a1 = array1[0];
        int i;
        for (i = 0; i < array1.length; i++) {
            //把比较大的值付给容器
            if (array1[i] > a1) {
                a1 = array1[i];
            }
        }
        // 求取最大值
        Integer a2 = array2[0];
        int j;
        for (j = 0; j < array2.length; j++) {
            //把比较大的值付给容器
            if (array2[j] > a2) {
                a2 = array2[j];
            }
        }
        //使用可变长数组的add方法
        ArrayList list = new ArrayList();
        if (a1.equals(a2)) {
            //分类讨论情况3
            System.out.println("两个数组的MAX值一样哦");


        } else if (a1 > a2) {
            // a1 > a2
            //分类讨论情况1
            for (i = 0; i < array1.length; i++) {
                //把比较大的值付给容器
                if (array1[i] > a2) {

                    list.add(array1[i]);
                }
            }

        } else {

            //a2 > a1
            //分类讨论情况2
            for (i = 0; i < array2.length; i++) {
                //把比较大的值付给容器
                if (array2[i] > a1) {

                    list.add(array2[i]);
                }
            }

        }

        System.out.println(list);

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康冕峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值