其他
那些年薪80-100万,35岁的互联网人,后来都去干嘛了?
(关注数据结构和算法,了解更多新知识)
最近在网上看到一网友提问,那些年薪80-100万,35岁的互联网人,后来都去干嘛了?
35岁对于程序员来说确实是一个比较伤感的话题,我们来看一下35岁之后的程序员现在都在干啥。
从评论区来看大部分还是继续从事目前的工作,也有不少已经降薪入职的。并且评论区出现最多的一个字就是“苟”,可见大家对自己的工作前景并不看好,原因就是因为自己年龄大了,万一哪天被裁真的不好找工作,所以能苟一天是一天。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第64题:最小路径和,这题在华为,腾讯和滴滴的面试中都考过,我们来看下。
问题描述
难度:中等
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
输入:grid = [[1,2,3],[4,5,6]]
输出:12
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 200
动态规划解决
public int minPathSum(int[][] grid) {
int m = grid.length, n = grid[0].length;
for (int i = 1; i < m; i++)// 第一列只能从上面下来
grid[i][0] += grid[i - 1][0];
for (int i = 1; i < n; i++)// 第一行只能从左边过来
grid[0][i] += grid[0][i - 1];
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++)// 递推公式
grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];
return grid[m - 1][n - 1];
}
public:
int minPathSum(vector<vector<int>> &grid) {
int m = grid.size(), n = grid[0].size();
for (int i = 1; i < m; i++)// 第一列只能从上面下来
grid[i][0] += grid[i - 1][0];
for (int i = 1; i < n; i++)// 第一行只能从左边过来
grid[0][i] += grid[0][i - 1];
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++)// 递推公式
grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];
return grid[m - 1][n - 1];
}
#define min(a, b) (((a) < (b)) ? (a) : (b))
int minPathSum(int **grid, int gridSize, int *gridColSize) {
int m = gridSize, n = gridColSize[0];
for (int i = 1; i < m; i++)// 第一列只能从上面下来
grid[i][0] += grid[i - 1][0];
for (int i = 1; i < n; i++)// 第一行只能从左边过来
grid[0][i] += grid[0][i - 1];
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++)// 递推公式
grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];
return grid[m - 1][n - 1];
}
def minPathSum(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
for i in range(1, m): # 第一列只能从上面下来
grid[i][0] += grid[i - 1][0]
for i in range(1, n): # 第一行只能从左边过来
grid[0][i] += grid[0][i - 1]
for i in range(1, m):
for j in range(1, n): # 递推公式
grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]
return grid[m - 1][n - 1]