想问参加过面试的大佬们有什么感想?最近刷大厂的面试题,一个比一个难……
資深大佬 : zzzrf 1
最近刷大厂的面试题,发现一个比一个难,不知道参加过面试的人是什么感觉。
做了一个京东面试题,我第一遍愣是啥都没看懂,做了半天……
public int twoColorsTower(int red, int green) { if (red == 0 || green == 0) { return 1; } if (red > green) { int temp = red; red = green; green = temp; } // dp[i&1][j]表示前 i 层一共放 j 个红石头 int[][] dp = new int[2][red + 1]; dp[1][0] = dp[1][1] = 1; int level = (int) Math.sqrt(2 * (red + green)); int sum = 1, lower = 0, upper = red; int curr = 1, prev; int MOD = (int) 1.0e9 + 7; for (int i = 2; i <= level; i++) { sum += i; int tmpUpper = Math.min(sum, red); int tmpLower = Math.max(sum - green, 0); // 红石头不够了,已经是最高层,停止更新 if (tmpLower > tmpUpper) break; upper = tmpUpper; lower = tmpLower; prev = curr; curr = curr ^ 1; // j 小于本层 i,红石只能是之前都放完了 for (int j = lower; j < i; j++) { dp[curr][j] = dp[prev][j]; } // 转移方程:dp[i][j] = dp[i-1][j] + dp[i-1][j-i] (when j>=i) // dp[i-1][j]表示第 i 层放绿石 dp[i-1][j-i]表示 i 层放红石 for (int j = i; j <= upper; j++) { dp[curr][j] = (dp[prev][j] + dp[prev][j - i]) % MOD; } } int ans = 0; for (int j = lower; j <= upper; j++) { ans = (ans + dp[curr][j]) % MOD; } return ans; }
[这里是题目原地址]
大佬有話說 (0)