12
返回列表 发新帖
楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家高频面经求解

🔗
kikiisme0201 2021-7-10 22:22:21 | 只看该作者
全局:
Falldawn 发表于 2021-6-17 06:13
这上面有人说了,感觉就应该是这样做,我改成了Java代码三个数组应该是分别代表从最上面entry行到当前位 ...

这应该是optimal solution, 可以节省空间到O(n)
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-RDU6B  2021-10-25 19:02:19
贴个我的cpp代码, O(2n)时间空间;
  1. int max_len(vector<vector<int>> &m) {
  2.   int rows = m.size();
  3.   int cols = m.front().size();

  4.   vector<vector<int>> left(rows, vector<int>(cols, INT_MIN));
  5.   auto right = left;

  6.   if (m[0][0] == 0) left[0][0] = 1;
  7.   if (m[0][cols - 1] == 0) right[0][cols - 1] = 1;

  8.   for (int i = 1; i < cols; i++) {
  9.     if (m[0][i]) continue;
  10.     left[0][i] = m[0][i - 1] ? 1 : left[0][i - 1] + 1;
  11.   }

  12.   for (int i = cols - 2; i >= 0; i--) {
  13.     if (m[0][i]) continue;
  14.     right[0][i] = m[0][i + 1] ? 1 : right[0][i + 1] + 1;
  15.   }

  16.   for (int r = 1; r < rows; r++) {
  17.     if (m[r - 1][0] == 0 && m[r][0] == 0) left[r][0] = max(left[r - 1][0], right[r - 1][0]) + 1;
  18.     for (int c = 1; c < cols; c++) {
  19.       if (m[r][c]) continue;
  20.       if (m[r][c - 1] == 0) left[r][c] = max(left[r][c], left[r][c - 1] + 1);
  21.       if (m[r - 1][c] == 0) left[r][c] = max(left[r][c], max(left[r - 1][c], right[r - 1][c]) + 1);
  22.     }

  23.     if (m[r - 1][cols - 1] == 0 && m[r][cols - 1] == 0) right[r][cols - 1] = max(left[r - 1][cols - 1], right[r - 1][cols - 1]) + 1;
  24.     for (int c = cols - 2; c >= 0; c--) {
  25.       if (m[r][c]) continue;
  26.       if (m[r][c + 1] == 0) right[r][c] = max(right[r][c], right[r][c + 1] + 1);
  27.       if (m[r - 1][c] == 0) right[r][c] = max(right[r][c], max(right[r - 1][c], left[r - 1][c]) + 1);
  28.     }
  29.   }

  30.   return max(*max_element(left[rows - 1].begin(), left[rows - 1].end()),
  31.              *max_element(right[rows - 1].begin(), right[rows - 1].end()));
  32. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表