您现在的位置是:首页 > 网站心得网站心得

2019阿里巴巴技术专家面试题汇总!附专家公布参考答案!

2019-08-13【网站心得】人已围观

简介2019阿里巴巴技术专家面试题汇总!阿里巴巴资深技术专家们,结合多年的工作、面试经验,总结提炼出这一套面试真题,能了解阿里巴巴技术专家的出题思路与考察要点,对面试针对性准备也非常具有参考意义。

2019阿里巴巴技术专家面试题汇总!


阿里巴巴资深技术专家们,结合多年的工作、面试经验,总结提炼出这一套面试真题,绝对超值!
这不仅是知识的收获,还能了解阿里巴巴技术专家的出题思路与考察要点,并加以消化吸收,这对自己技术能力是一种极大的提升,对面试针对性准备也非常具有参考意义。
 
 

面试题 001 如何实现一个高效的单向链表逆序输出?

参考答案
typedefstructnode
{
intdata;
structnode*next;
node(intd):data(d),next(NULL){}
}node;
voidreverse(node*head)
{
if(NULL==head||NULL==head->next)
{
return;
}
node*prev=NULL;
node*pcur=head->next;
node*next;
while(pcur!=NULL)
{
if(pcur->next==NULL)
{
pcur->next=prev;
break;
}
next=pcur->next;
pcur->next=prev;
prev=pcur;
pcur=next;
}
head->next=pcur;
node*tmp=head->next;
while(tmp!=NULL)
{
cout<<tmp->data<<"\t";
tmp=tmp->next;
} }
 
 

面试题 002 已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。

考察点
1. 基础算法的灵活应用能力(二分法学过数据结构的同学都知道,但不一定往这个方向考虑;如果学过数值计算的同学,应该还要能想到牛顿迭代法并解释清楚)
2. 退出条件设计

参考答案
1. 已知 sqrt(2)约等于 1.414,那么就可以在(1.4, 1.5)区间做二分查找,如:
a) high=>1.5
b) low=>1.4
c) mid => (high+low)/2=1.45
d) 1.45*1.45>2 ? high=>1.45 : low => 1.45
e) 循环到 c)
2. 退出条件
a) 前后两次的差值的绝对值<=0.0000000001, 则可退出

代码示例:
const double EPSINON = 0.0000000001;
double sqrt2( )
{
double low = 1.4, high = 1.5;
double mid = (low + high) / 2;
while (high – low > EPSINON)
{
if (mid*mid < 2)
{
high = mid;
}
else
{
low = mid;
}
mid = (high + low) / 2;
}
return mid;
}
 
 

面试题 003 给定一个二叉搜索树(BST),找到树中第 K 小的节点。

考察点
1. 基础数据结构的理解和编码能力
2. 递归使用

◼ 示例:
如下图,输入 K=3, 输出节点值 3
说明: 保证输入的 K 满足 1<=K<=(节点数目)
              
           5
         /   \
       3      6
      /  \
    2     4
  /
1

参考答案
树相关的题目,第一眼就想到递归求解,左右子树分别遍历。联想
到二叉搜索树的性质, root 大于左子树,小于右子树,如果左子树
的节点数目等于 K-1,那么 root 就是结果,否则如果左子树节点数
目小于 K-1,那么结果必然在右子树,否则就在左子树。因此在搜
索的时候同时返回节点数目,跟 K 做对比,就能得出结果了。

◼ 代码示例:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/class Solution {
private class ResultType {
// 是否找到
boolean found;
// 节点数目
int val;
ResultType(boolean found, int val) {
this.found = found;
this.val = val;
}
}
public int kthSmallest(TreeNode root, int k) {
return kthSmallestHelper(root, k).val;
}
private ResultType kthSmallestHelper(TreeNode root, int k) {
12
if (root == null) {
return new ResultType(false, 0);
}
ResultType left = kthSmallestHelper(root.left, k);
// 左子树找到,直接返回
if (left.found) {
return new ResultType(true, left.val);
}
// 左子树的节点数目 = K-1,结果为 root 的值
if (k - left.val == 1) {
return new ResultType(true, root.val);
}
// 右子树寻找
ResultType right = kthSmallestHelper(root.right, k - left.val - 1);
if (right.found) {
return new ResultType(true, right.val);
}
// 没找到,返回节点总数
return new ResultType(false, left.val + 1 + right.val);
}
}
复杂度分析:
时间复杂度: O(N),节点最多遍历一遍
空间复杂度: O(1),(如果算上递归深度可以当做 O(logN))
 

以上节选几题,可以看出技术专家的出题非常用心,每道题都给出的解题思路和详细答案。

这套技术题共计28题,这里为大家准备了pdf汇总,方便学习查看  请点击下载 2019阿里巴巴技术专家面试题汇总(附带专家答案)

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

站点信息

  • 建站时间:2019-05-01
  • 网站程序:帝国CMS7.5
  • 文章统计45篇文章
  • 微信公众号:关注最新拼团信息