快手二面。这一面算是到目前为止,我遇到过的最神奇的一面了。
首先自我介绍,然后就面试官针对其中的一个项目(我一共准备了4个项目,面了那么多面试官,所有人都问的我的电商项目,只有这个快手面试官问了我一个安卓项目,让我有点刮目相看)提问了一些问题,我都顺顺利利都回答出来了。这部分大约七八分钟的样子。
然后就开始撸算法了。
第一题,给定一个数组,然后该数组中有一个数字出现的次数超过了一半,请求出这个数字是多少。这个应该算是比较基础的问题了,奈何我没刷过,只是记得怎么做,所以只能磕磕绊绊写出来了。
第二题,给定一个数字,把它转成中文。这个我写了一会,发现自己写的思路有比较多的问题,最后只是和面试官聊了一下思路。下面是我从网上找的答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public static String toNum(String temp) { String[] units = new String[]{"十", "百", "千", "万", "十", "百", "千", "亿"};
String[] numeric = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String res = ""; for (int k = -1; temp.length() > 0; k++) { int j = Integer.parseInt(temp.substring(temp.length() - 1, temp.length())); String rtemp = numeric[j];
if (j != 0 && k != -1 || k % 8 == 3 || k % 8 == 7) { rtemp += units[k % 8]; }
res = rtemp + res;
temp = temp.substring(0, temp.length() - 1); }
while (res.endsWith(numeric[0])) { res = res.substring(0, res.lastIndexOf(numeric[0])); }
while (res.contains(numeric[0] + numeric[0])) { res = res.replaceAll(numeric[0] + numeric[0], numeric[0]); }
for (int m = 1; m < units.length; m++) { res = res.replaceAll(numeric[0] + units[m], units[m]); }
if (res.startsWith(numeric[1] + units[0])) { res = res.substring(1); }
return res; }
|
我当时写的思路和上面的有出入。
首先我的总体思路是把整个数字分割成xxxx亿xxxx万xxxx的,也就是三个部分,然后这三个部分就可以统一用一个函数来进行输出,就是输出的时候需要考虑后面的单位,然后因为需要考虑零的问题,所以有不少东西。