美团暑期实习自驾仿真算法二面面经

来源:投稿 作者:LSC
编辑:学姐

1.自我介绍

2.介绍自己的项目,问的不深。(10分钟)

3.编程题

(1)将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。

例如:

给出的链表为 1→2→3→4→5→NULL, m=2,n=4,

返回1→4→3→2→5→NULL.

数据范围: 链表长度 0

要求: 时间复杂度O(n) ,空间复杂度O(n)

进阶: 时间复杂度O(n),空间复杂度 O(1)

# n int整型 
# @return ListNode类
#
class Solution:
    def reverse(self, head):
        pre = None
        p = head
        while p != None:
            t = p.next
            p.next = pre 
            pre = p 
            p = t 
        return pre
        
    def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
        # write code here
        num = 1
        pre = ListNode(0)
        pre.next = head
        h, r = pre, head 
        while num < n:
            if num < m:
                h = h.next 
            r = r.next 
            num += 1
        q = r.next
        p = h.next 
        h.next = None
        r.next = None 
        p = self.reverse(p)
        h.next = p 
        while p.next != None:
            p = p.next
        p.next = q
        return pre.next

(2)地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当 threshold 为 18 时,机器人能够进入方格   [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?

数据范围: 0 ≤ threshold ≤ 15  ,1 ≤ rows, cols ≤ 100

进阶:空间复杂度 O(nm)  ,时间复杂度 O(nm)

样例1: 输入: 1,2,3 输出: 3

样例2: 输入: 0,1,3 输出: 3 输入: 10,1,100 输出: 29

说明: [0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[0,21],[0,22],[0,23],[0,24],[0,25],[0,26],[0,27],[0,28] 这29种,后面的[0,29],[0,30]以及[0,31]等等是无法到达的

样例: 4 输入: 5,10,10 输出: 21

class Solution {
public:
    int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
    int vis[105][105] = {0};
    int g[105][105] = {0};
    int f(int x) {
        int s = 0;
        while(x) {
            s += x % 10;
            x /= 10;
        }
        return s;
    }
    void dfs(int x, int y, int rows, int cols) {
        if(g[x][y] == -1) {return;}
        for(int i = 0; i < 4; ++i) {
            int xx = x + dir[i][0], yy = y + dir[i][1];
            if(xx >= 0 && xx < rows && yy >= 0 && yy < cols && g[xx][yy] != -1 && vis[xx][yy] == 0) {
                vis[xx][yy] = 1;
                g[xx][yy] = 1;
                dfs(xx, yy, rows, cols);
            }
        }
    }
    int movingCount(int threshold, int rows, int cols) {
        for(int i = 0; i < rows; ++i) {
            for(int j = 0; j < cols; ++j) {
                int sum = f(i) + f(j);
                if(sum > threshold) {g[i][j] = -1;}
            }
        }
        g[0][0] = 1;
        dfs(0, 0, rows, cols);
        int ans = 0;
        for(int i = 0; i < rows; ++i) {
            for(int j = 0; j < cols; ++j) {
                if(g[i][j] == 1) {ans++;}
            }
        }
        return ans;
    }
};

4.继续问实习项目,怎么优化模型的。

5.实习中遇到什么困难,怎么解决的?训练模型中遇到什么困难,怎么解决的?

6.C++的智能指针 (没用过)

7.C++的vector的内部是怎么实现的?

8.开放题

如果3D建模一个北京市,需要多少资源多少数据,没有标准答案

9.反问

面试官问我什么时候能去实习 我问需要做什么学习准备、多久能转正(三个月往上)

关注下方《学姐带你玩AI》

算法工程师万能简历公式+200多个简历模板(中英文)

回复“简历”轻松获取!

码字不易,欢迎大家点赞评论收藏!

你可能感兴趣的:(人工智能干货,深度学习干货,美团,面试,仿真算法,人工智能)