• 阿里面试


    首先,因为经过了笔试,我想面试应该更多的会涉及一些基础问题,再准备了一天基础问题之后,面试官上来就给了一道编程题,一下给我干懵了。

    可能也是因为第一次面试,觉得发挥的很差,很多东西都没有想起来,一血给了大厂也是值得了,最起码知道了自己现在最欠缺的是什么,实力还差的远。

    题目:输入N个int型数组,输出一个有序数组。(不能调用第三方库)(听起来很简单,但感觉又有不少坑,而且在网页上直接写,没有ide的提示,除了逻辑想法,对基础方法的掌握还有待加强)。

    public class Main{
        public static void main(String[] args) {
            int[][] arr = new int[][]{
                {1,2,3},
                {7,6,8},
                {4,6,9},
                {12,18,63},
                {1,96,10003,569}
            };
            int[] newArray = getSort(arr);
            for(int i : newArray) {
                System.out.print(i + " ");
            }
            
        }
        public static int[] getSort(int[][] arr) {
            StringBuilder builder = new StringBuilder();
            for(int k = 0 ; k < arr.length ; k ++) {
                for(int i = 0 ; i < arr[k].length ; i ++) {
                    builder.append(arr[k][i] + " ");
                }
            }
            String[] newArr = builder.toString().split(" ");
            
            int[] mArr = new int[newArr.length];
            for(int i = 0 ; i < newArr.length ; i ++) {
                mArr[i] = Integer.parseInt(newArr[i]);
            }
            return sort(mArr);
        }
        public static int[] sort(int[] arr) {
            for(int i = 0 ; i < arr.length ; i ++) {
                for(int k = 0 ; k < arr.length - i - 1 ; k ++) {
                    if( arr[k] > arr[k + 1]) {
                        int temp = arr[k + 1];
                        arr[k + 1] = arr[k];
                        arr[k] = temp;
                    }
                }
            }
            return arr;
            
        }
    }

    做的有些繁琐,排序应该没什么问题,用的冒泡排序,主要在合并数组方面还有待改进,希望随着学习的深入可以想出可以更优化的方法吧。

    总结一下刚才写代码遇到的坑:

    1.下次遇到向数组中添加不确定个元素要优先想到StringBuilder/StringBuffer或者ArrayList(暂时还没有尝试过),面试的时候就死活想不起来,一直纠结在数组的循环怎么设置。

    2.StringBuilder中添加元素,元素是一个挨一个的,可以考虑在append的时候加一个空格或者逗号,方便转化为字符串再转化为字符串数组时分割,.split()这个方法印象中有,一直没想起来方法名,而且得到的是字符串数组,还需要转化为int型数组。

    3.字符串转换为int型,方法为Integer.parseInt()。

    4.冒泡排序第二层循环 i < arr.length - k -1。每次都忘了要多-1。

    目前想到的就这么多,需要学习的东西还有很多,继续加油吧。

    4/16 更

    昨天和哥交流了一下,都忘了数组复制这回事儿了

    public class Solution4{
        public static void main(String[] args) {
            int[][] arr = new int[][]{
                    {1,2,3},
                    {7,6,8},
                    {4,6,9},
                    {12,18,63},
                    {1,96,10003,569}
            };
            int[] newArray = sort(arr);
            for(int i : newArray) {
                System.out.print(i + " ");
            }
    
        }
        public static int[] sort(int[][] arr) {
    //        StringBuilder builder = new StringBuilder();
    //        for(int k = 0 ; k < arr.length ; k ++) {
    //            for(int i = 0 ; i < arr[k].length ; i ++) {
    //                builder.append(arr[k][i] + " ");
    //            }
    //        }
    //        String[] newArr = builder.toString().split(" ");
    //
    //        int[] mArr = new int[newArr.length];
    //        for(int i = 0 ; i < newArr.length ; i ++) {
    //            mArr[i] = Integer.parseInt(newArr[i]);
    //        }
    //        return bubbleSort(mArr);
            int nums = 0;int index = 0;
    //        for(int index = 0 ; index < arr.length ; index ++){
    //            nums += arr[index].length;
    //        }
            for(int[] ele : arr){
                nums += ele.length;
            }
            int[] res = new int[nums];
    
    //        for(int k = 0 ; k < arr.length ; k ++){
    //            System.arraycopy(arr[k],0, res, index, arr[k].length);
    //            index += arr[k].length;
    //        }
            for(int[] element : arr){
                System.arraycopy(element, 0, res, index, element.length);
                index += element.length;
            }
            return bubbleSort(res);
        }
        public static int[] bubbleSort(int[] arr) {
            for(int i = 0 ; i < arr.length ; i ++) {
                for(int k = 0 ; k < arr.length - i - 1 ; k ++) {
                    if( arr[k] > arr[k + 1]) {
                        int temp = arr[k + 1];
                        arr[k + 1] = arr[k];
                        arr[k] = temp;
                    }
                }
            }
            return arr;
    
        }
    }

    1.方法命名要有面向对象的含义

    2.变量定义容易理解

    3.增强型for循环有时候用起来比普通for循环好用得多

  • 相关阅读:
    投票协议:二进制表示方法
    投票协议:构建和解析协议消息
    多任务处理:多线程
    通信:成帧与解析
    通信:组合输入输出流
    跨越FSO WSH写文件
    MS07004漏洞
    解决ASP(图像)上传漏洞的方法
    让硬件入侵不再是神话
    解决ASP(图像)上传漏洞的方法
  • 原文地址:https://www.cnblogs.com/HarSong13/p/10703891.html
Copyright © 2020-2023  润新知