【编程题】【2019腾讯技术类第一次笔试】

一、前缀和/快慢指针,暴力法会超时

快慢指针:快指针先走k个 然后走一遍 O(n) 走的时候保存最小值 就是答案

二、回溯/BFS

【编程题】【2019腾讯技术类第一次笔试】_第1张图片

解题思路:

在只走‘.’的情况下把终点的冰踩碎

输入n*m的矩阵,以及走的开始和终点位置

在开始点,上下左右找‘.’,有就走,并把改点设置为‘X’,走到终点时候,若终点是‘X’则成功。

其他情况都失败。

三、最小生成树

【编程题】【2019腾讯技术类第一次笔试】_第2张图片

构造一个通讯网络,使得N个城市能够连通并且代价最小(可以使用prim算法实现)

问题描述:

给顶一个地区的N个城市间的距离网,用PRIM算法或KRUSKAL算法建立最小生成树,并计算得到的最小生成树的代价.

基本要求:

1.城市间的距离采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值.要求在屏幕上显示得到的最小生成树作用包括了哪些城市间的道路,并显示得到的最小生成树的代价.

2.表示城市间距离网的临界矩阵(要求最小6个城市,10条边).

3.最小生成树中宝库的边及其权值,并显示得到的最小生成树的代价.

其中要注意城市间有向

四、动态规划

【编程题】【2019腾讯技术类第一次笔试】_第3张图片

if num[x][y] != 0:

dp[x][y][0] = max(dp[x-1][y][0], dp[x-1][y+1][0], dp[x-1][y-1][0]) + num[x][y] # 标记正Max

dp[x][y][1] = min(dp[x-1][y][1], dp[x-1][y+1][1], dp[x-1][y-1][1]) + num[x][y] # 标记负Max

else:

dp[x][y][0] = -1 * min(dp[x-1][y][1], dp[x-1][y+1][1], dp[x-1][y-1][1])

dp[x][y][1] = -1 * max(dp[x-1][y][0], dp[x-1][y+1][0], dp[x-1][y-1][0])

五、贪心

【编程题】【2019腾讯技术类第一次笔试】_第4张图片

unfinished

你可能感兴趣的:(编程题)