依图科技面试

2019年9月21日 一面:一个小时, 通过

  1. 两道coding题
    a. 输入四个点,判断这四个点能不能构成正方形。
    思路:
    step1:四个点、计算两两间的距离,共6个距离。
    step2:若是正方形,距离只有2中长度,且长边是短边的根号2倍。
    继续问:为什么还有加上根号2倍的限制,举一个四个点只用两种长度的边,但不是正方形的例子。如带有一个等边三角形风筝模型。

b. 给一堆石子,数量为n。甲乙两个一次能拿1个或者2个,甲是先手,谁拿走最后一个石子谁就赢了。假设甲乙都是足够聪明的。问谁会赢。
答案:当n能整除以(2+1)时,乙赢;反之甲赢;
为什么:设n能整除以(2+1)是平衡状态;当n处于平衡状态是,不过先手拿了多少个,我后一个人后能将n恢复到平衡状态。到n=3时,先手必输。故n能整除以(2+1)时,乙赢;而n不能整除以(2+1)时,甲可以将n转为平衡状态,这样就是乙先手的平衡状态了,就是甲赢。

  1. 聊了简历上自己做的项目,就聊自己做了什么。没有深入。

2019年9月27日 二面:一个小时,未知

  1. 一道coding题:给你一个n*n的正整数矩阵,求左上角到右下角的最短路径和。
    解:动态规划问题,状态转移:
//dp[i][j] = min(dp[i-1][j], dp[i][j-1])+matrix[i][j]
//完整代码
#include <iostream>
#include<vector>
using namespace std;
// dp[i][j] = min(dp[i-1][j], dp[i][j-1])+matrix[i][j]
int mindepth(vector<vector<int>> M){
    int n = M.size();
    vector<vector<int>> dp(n, vector<int>(n, M[0][0]));
    for(int i=1; i<M.size(); i++){
        dp[i][0] = dp[i-1][0] + M[i][0];
    }
    for(int i=1; i<M[0].size(); i++){
        dp[0][i] = dp[0][i-1] + M[0][i];
    }
    for(int i=1; i<M.size(); i++){
        for(int j=1; j<M[0].szie(); j++){
            dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + M[i][j];
        }
    }
    return dp[n-1][n-1];
}


  1. 聊简历上的项目,聊得比一面要深入一些。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值