Leetcode: Google interview questions - Round 2 - #3 - 他人汇总
莉蔻三九九及其变种(汇率)频率:21
就是一个2维数组里的有人和自行车,要每个人匹配到一辆自行车,人和自行车的距离越短越好,没有距离相同的情况。就是算出所有的距离然后放到heap里慢慢pop出来,记录下人和车的状态就可以了。
频率:13
再跟一下
利口六八四 六八五及其变种(bst删除额外边)
频率:10
-baidu 1point3acres
利口六二
著名变种:DP。给定一个矩形的长宽,用多少种方法可以从左上角走到右上角 (每一步,只能向正右、右上 或 右下走):整个矩形遍历做DP即可,不需要想复杂. 牛人云集,一亩三分地
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public static void main(String[] ss) { System.out.println(ways( 7 , 6 )); } public static int ways( int m, int n) { int [][] dp = new int [m + 2 ][n]; dp[ 1 ][ 0 ] = 1 ; for ( int i = 1 ; i < n; i++) { for ( int j = 1 ; j < m + 1 ; j++) { dp[j][i] = dp[j - 1 ][i - 1 ] + dp[j][i - 1 ] + dp[j + 1 ][i - 1 ]; } } return dp[ 1 ][n - 1 ]; } |
Solution, 所有路径必须经过这3个点,求一共有多少种走法(到达右上)
其实这3个点跟起点和终点没有区别。如果存在这3个点,则这5个点中的任意2个点不可能存在在一个column上。按column来划分矩形,分别对两两做dp
可以写一个方法
int ways(int m, int n, int[] start, int[] end, int startCount) 来避免代码重复
-follow up:如何判断这三个点一个是合理的,即存在遍历这三个点的路经
Solution
2个相邻之间的点的连线与水平线的夹脚 <= 45度,就可以说明左边的点能到达右边的点。表示为 |y2 - y1| >= x2 - x1, 假设(x1, y1) (x2, y2) 为左右2点
-follow up:如果给你一个H,要求你的路径必须向下越过H这个界,怎么做 (别问我,我不会)
Solution
找出不越界的路线个数,原来的结果相减就得到越过的个数
楼主这题试一试用镜像做,也就是说重点不在(W, 0), 而在(W, 2H), W是矩阵的宽度
频率:9
六口把四散(猜词)
843
频率:9
Read full article from Leetcode: Google interview questions - Round 2 - #3 - 他人汇总
No comments:
Post a Comment