面试过程中使用了微软的teams进行桌面共享,可以使用自己本地的IDE
1.第一个问题是求一个数是否为奇数,面试官说为了缓解面试的紧张,所以先问一个简单的来适应下环境
楼主使用了跟二取余的方式:
public boolean isOdd(int i){
if (0 == i % 2) {
return false;
}
return true;
}
面试官说用一条指令完成,然后楼主又写了一个:
return 0 != i % 2 ?false:true;
后来面试官提示说,0 != i % 2这个返回的直接就是个boolean值,无需在写后面的false、true之类的,额,这才反应过来确实是这样。。。
2.面试官说这种取模运算效率可能不高,还有更好的思路么?楼主说使用位运算,但是并没有能用代码实现出来(还需要努力啊),面试官说思路是对的,奇偶数的差别就是最后一位是不是1,位运算都有哪些操作?(楼主确实是忘记了,只记得有什么左移右移但是在不知道是怎么操作的了。。。所以这个问题没能实现出来)
3.第三个问题是给定一个数组求不在这个数组里面的最小的正整数(数组值不重复)
面试官也是很耐心的在提示思路:
<1>如果我们看到一个数组,那我们怎么找?先排序,完了看最小的整数是啥;
<2>最小的正整数是1,那如果1不在数组里面,这个值肯定就是1,如果在,那继续加一再找;
楼主最终使用了以下解法,时间复杂度在O(n):
public int getInt(int[] array){
HashMap hm = new HashMap();
int i=0;
for (int a:array){
hm.put(a,i);
i++;
}
int flag = 1;
while(hm.get(flag) !=null){
flag++;
}
return flag;
}
4.面试官问有没有学过算法,楼主是通信专业,所以课程里没有这类的课,只是自己有简单了解过,这方面真的不精通实在是,所以并没有答出来面试官的这一个问题:
一个m*n的矩阵,从左上到右下最短路径有几种
楼主只能看出来这个题目需要动态规划了,所以,额,惭愧。。。
5.题目完了之后,交流了下这个teams这个会议软件有啥优缺点没有,楼主也提了些自己的使用体验。面试到这就结束了,一个小时左右的时间。
总结了下,感觉一面还是很看重算法的,还有解决问题的思路;革命尚未成功,同志仍需努力呀。。。