编程题
- 数组题
一排人需要按照高矮顺序从小到大站。找出有多少个人站错了位置。
public static int countStudents(List<Integer> height) {
int res = 0;
int n = height.size();
if (n <= 1) return 0;
List<Integer> copy = new ArrayList(height);
Collections.sort(copy);
for (int i = 0; i < n; i++) {
if (copy.get(i) != height.get(i))
res++;
}
return res;
}
- 动态规划。用硬币凑钱原题。只不过改了描述,变成雨伞躲人,要求正好。
public static int getUmbrellas(int requirement, List<Integer> sizes) {
int n = sizes.size();
if (n == 0) return -1;
Collections.sort(sizes);
int[] dp = new int[requirement+1];
dp[0] = 0;
for (int i = 1; i <= requirement; i++)
dp[i] = Integer.MAX_VALUE-10;
for (int umbre: sizes) {
if (umbre > requirement) break;
for (int i = umbre; i <= requirement; i++) {
dp[i] = Math.min(dp[i], dp[i-umbre] + 1);
}
}
if (dp[requirement] >= Integer.MAX_VALUE-10)
return -1;
return dp[requirement];
}
数学统计部分
C(52-16, 13) / C(52, 13) = 0.00363
题目并没说明顺子能不能包括j, q, k。我当时做题认为不包括,但是实际上包括。
而且A既可以出现在
4^5*10 / C(52, 5) = 10240/2,598,960 = 0.004
不能认为分子分母的花色可以抵消,就不考虑花色。这样做法是错误的。分母小了,有一些组合没有被考虑进去。
这一题的正确理解应该是在出现白鞋之前出现过黑鞋就行了,而不需要出现白鞋的前一次必须是黑鞋。如果按照这个理解,把满足条件的事件记为x,那么这道题实际上是在求P(x) = P(黑)+P(红,黑)+P(红,红,黑)+…,构成了一个等比数列。
选A。
A, sin(1/x) 会在x趋近于正无穷时趋近于0.
trace是对角线之和。anti-symmetric并不是不对称,而是
,有一个推论是
。
上式证明了AB也是一个anti-symmetric的矩阵。所以trace为0.
三个概率的平方相加。0.46
第一个人的概率1/2,第二个人的概率1/4,第三个人的概率1/8,第四个人的概率1/16,第五个人的概率1/32。之后每一轮概率的倍数保持不变。
找local min或者local max。笨方法就是求一阶导数。选择题的办法就是代数。如果两边的点都比自己大/小,就是答案。这题选B。
实际上C是对的。
当n=1,
当n=2,
当n=3,
选B。
A明显是错的,因为f(x,y)在(0,0)不一定是平滑的。
C,D错误的原因是f(x,y)在(0,0)的极限有可能是+inf,所以不一定存在。