网易有道二面-20231016
20231023 已挂
1. 自我介绍
2. 简历实习经历和项目内容自己介绍收获和难点以及怎么解决的
3.一个优秀的前端工程师应该具备哪些技能
4. 未来三年规划
5. 写个题
// 给你一个大小为 m x n 的矩阵 grid 。最初,你位于左上角 (0, 0) ,每一步,你可以在矩阵中 向右 或 向下 移动。
// 在从左上角 (0, 0) 开始到右下角 (m - 1, n - 1) 结束的所有路径中,找出具有 最大非负积 的路径。路径的积是沿路径访问的单元格中所有整数的乘积。
// 返回 最大非负积 对 10^9 + 7 取余 的结果。如果最大积为 负数 ,则返回 -1 。
// 注意,取余是在得到最大积之后执行的。
DP不太难,但是时间不太够,有报错的代码也放这里了
```js
function maxMatrixMulple(grid){
let m = grid.length;
let n = grid[0].length;
let dp = Array(m)
for(let i=0;i<m;i++){
dp[i] = Array(n);
for(let j=0;j<n;j++){
dp[i][j] = Array(2);
dp[i][j][0]=0;
dp[i][j][1]=0;
}
}
dp[0][0][0] = grid[0][0]
dp[0][0][1] = grid[0][0]
for(let i=0;i<m;i++){
for(let j=0;j<n;j++){k
let k = grid[i][j];
if(i-1>=0){
if(k > 0){
dp[i][j][0] = dp[i-1][j][0]*k;
dp[i][j][1] = dp[i-1][j][1]*k;
}else{
dp[i][j][1] = dp[i-1][j][0]*k;
dp[i][j][0] = dp[i-1][j][1]*k;
}
}
if(j-1>=0){
if(k>0){
let curDpMin = dp[i][j-1][0]*k;
let curDpMax = dp[i][j-1][1]*k;
dp[i][j][0] = curDpMin < dp[i][j][0]?curDpMin:dp[i][j][0];
dp[i][j][1] = curDpMax > dp[i][j][1]?curDpMax:dp[i][j][1];
}else{
let curDpMax = dp[i][j-1][0]*k;
let curDpMin = dp[i][j-1][1]*k;
dp[i][j][0] = curDpMin < dp[i][j][0]?curDpMin:dp[i][j][0];
dp[i][j][1] = curDpMax > dp[i][j][1]?curDpMax:dp[i][j][1];
}
}
}
}
let resValue = dp[m-1][n-1][1];
if(resValue > 0){
return resValue%(Math.pow(10, 9)+7);
}else{
return -1;
}
}
console.log(maxMatrixMulple([[-1,-2,-3],[-2,-3,-3],[-3,-3,-2]]))
```