楼主: tommy1122337
跳转到指定楼层
上一主题 下一主题
收起左侧

Google Onsite

🔗
sophie0815 2016-11-13 13:57:00 | 只看该作者
全局:
问下楼主 第二题 如果障碍物只是在最外面一圈的话 只有 终点和起点在同一行或者同一列或者最外围那一圈才可能到达吧?   这样题就很不make sense 啊, 我猜障碍物应该处处存在吧?   这样的话用dfs可以吗?
回复

使用道具 举报

🔗
 楼主| tommy1122337 2016-11-13 14:17:01 | 只看该作者
全局:
sophie0815 发表于 2016-11-13 13:57
问下楼主 第二题 如果障碍物只是在最外面一圈的话 只有 终点和起点在同一行或者同一列或者最外围那一圈才可 ...

是的 上面那圖只是解釋
障礙物可以很多
我是用DFS 一旦選擇方向就一直走到底
回复

使用道具 举报

🔗
zzgzzm 2016-11-14 05:20:52 | 只看该作者
全局:
第三轮:LZ已经写了recusive的,这和DP差不多了:时间O(nk),空间O(k)
  1. double getProb(int k, vector<double>& c) {
  2.   int n = c.size(); if (k > n) return 0;
  3.   // prev[kk]: probability of kk heads in first nn-1 coins
  4.   // cur[kk]:  probability of kk heads in first nn coins
  5.   vector<double> prev(k+1, 0.0), cur(k+1, 0.0);
  6.   prev[0] = cur[0] = 1.0;
  7.   for (int nn = 1; nn <= n; ++nn) {
  8.     cur[0] = prev[0]*c[nn-1];
  9.     for (int kk = 1; kk <= min(nn,k); ++kk) {
  10.       cur[kk] = prev[kk-1]*c[nn-1] + prev[kk]*(1-c[nn-1]);  
  11.       prev[kk-1] = cur[kk-1];
  12.     }
  13.     prev[min(nn,k)] = cur[min(nn,k)];
  14.   }
  15.   return cur[k];
  16. }
复制代码
回复

使用道具 举报

🔗
zhenjieruan 2016-11-14 06:16:24 | 只看该作者
全局:
第三题列了一下状态转移方程不知道对不对... f[n][k]代表在第 n 个硬币有 k个头的概率,那么 f[n][k] = P(n)*f[n-1][k-1] + (1-P(n))*f[n-1][k]
回复

使用道具 举报

🔗
zzgzzm 2016-11-14 06:26:56 | 只看该作者
全局:
第一轮:将s="12345678910111213..." 看成一个Trie,那么第nDigits 层就有9×10^(nDigits -1)个数,每个数有nDigits 个数字。对于给定的index=i看s[\i]对应的数字在那一层,再看落到哪个数的哪个数字上就好了。
  1. char getChar(int i) {
  2.   if (i < 0) return '\0';
  3.   int count = 9, nDigits = 0;
  4.   while (i+1 > (++nDigits)*count) { i -= nDigits*count; count *= 10; }
  5.   int x = count/9 + i/nDigits, pos = nDigits - i%nDigits;
  6.   while (--pos > 0) x /= 10;
  7.   return '0' + x%10;
  8. }
复制代码
回复

使用道具 举报

🔗
zzgzzm 2016-11-14 06:28:22 | 只看该作者
全局:
zhenjieruan 发表于 2016-11-14 06:16
第三题列了一下状态转移方程不知道对不对... f[n][k]代表在第 n 个硬币有 k个头的概率,那么 f[n][k] = P(n) ...

嗯,我觉得就是这样对n和k做DP就行了。
对n的DP实际可以只用2个变量,省空间。
回复

使用道具 举报

🔗
zzgzzm 2016-11-14 06:35:30 | 只看该作者
全局:
hahayufindjob 发表于 2016-11-13 00:41
不是太明白,不用string 算,那么是要统计下stirng中各个char的出现规律吗?

我不是LZ: 这个题是相当于给定一个无穷的stringstream: 123456789101112131415... 问第i个位置的digit是什么?
回复

使用道具 举报

🔗
zzgzzm 2016-11-14 07:21:25 | 只看该作者
全局:
第二题:用DFS是不是这个意思. 当用DFS迭代时同时要传当前的方向,然后若在同一方向的位置无障碍物时就只沿这个方向搜索;否则沿垂直的2个方向搜索。
  1. int m, n; // maze dimensions
  2. vector<int> start, goal;
  3. vector<vector<int>> dirs = {{1,0},{0,-1},{-1,0},{0,1}};

  4. bool dfs(vector<vector<int>>& maze, int i, int j, int d) {
  5.   if (i < 0 || i >= m || j < 0 || j >= n || maze[i][i]) return false;
  6.   if (i == goal[0] && j == goal[1]) return true;
  7.   maze[i][i] = 1; // set as visited
  8.   // next location in same direction
  9.   vector<int> next = {i+dirs[d][0], j+dirs[d][1]};
  10.   // search only same direction if available
  11.   if (0 <= next[0] && next[0] < m && 0 <= next[1] && next[1] < n && !maze[next[0]][next[1]])
  12.       return dfs(maze, next[0], next[1], d);
  13.   // search other directions only if same direction unavailable      
  14.   else return dfs(maze, i+dirs[(d+1)%4][0], j+dirs[(d+1)%4][1], (d+1)%4) ||
  15.               dfs(maze, i+dirs[(d-1)%4][0], j+dirs[(d-1)%4][1], (d-1)%4);
  16. }

  17. bool canFinish(vector<vector<int>>& maze, vector<int> s, vector<int> e) {
  18.   if ((m = maze.size()) == 0) return false;
  19.   if ((n = maze[0].size()) == 0) return false;
  20.   start = s, goal = e;
  21.   // search each direction from start
  22.   return dfs(maze, s[0]+dirs[0][0], s[1]+dirs[0][1], 0) ||
  23.          dfs(maze, s[0]+dirs[1][0], s[1]+dirs[1][1], 1) ||
  24.          dfs(maze, s[0]+dirs[2][0], s[1]+dirs[2][1], 2) ||
  25.          dfs(maze, s[0]+dirs[3][0], s[1]+dirs[3][1], 3);
  26. }
复制代码
回复

使用道具 举报

🔗
sunnyroom 2016-11-26 11:49:28 | 只看该作者
全局:
zzgzzm 发表于 2016-11-14 05:20
第三轮:LZ已经写了recusive的,这和DP差不多了:时间O(nk),空间O(k)

能解释一下概率是怎么计算的吗?
碰见概率就蒙蔽
回复

使用道具 举报

🔗
sunnyroom 2016-11-26 11:55:02 | 只看该作者
全局:
楼主第四题 带权有向图 最短路径 Djkstra算法吗?
回复

使用道具 举报

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

本版积分规则

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