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

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<size≤1000,链表中每个节点的值满足∣val∣≤1000

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

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

# n int整型 
# @return ListNode类
#
class Solution:def reverse(self, head):pre = Nonep = headwhile p != None:t = p.nextp.next = pre pre = p p = t return predef reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:# write code herenum = 1pre = ListNode(0)pre.next = headh, r = pre, head while num < n:if num < m:h = h.next r = r.next num += 1q = r.nextp = h.next h.next = Noner.next = None p = self.reverse(p)h.next = p while p.next != None:p = p.nextp.next = qreturn 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多个简历模板(中英文)

回复“简历”轻松获取!

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

本文链接:https://my.lmcjl.com/post/1727.html

展开阅读全文

4 评论

留下您的评论.