阿里面试
Posted harsong13
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里面试相关的知识,希望对你有一定的参考价值。
首先,因为经过了笔试,我想面试应该更多的会涉及一些基础问题,再准备了一天基础问题之后,面试官上来就给了一道编程题,一下给我干懵了。
可能也是因为第一次面试,觉得发挥的很差,很多东西都没有想起来,一血给了大厂也是值得了,最起码知道了自己现在最欠缺的是什么,实力还差的远。
题目:输入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。
目前想到的就这么多,需要学习的东西还有很多,继续加油吧。
以上是关于阿里面试的主要内容,如果未能解决你的问题,请参考以下文章
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试