leetcode上做了几道题,
同样的逻辑,Rust 48ms 6M内存,改成 C++ 结果用了 200ms 62MB内存。
(
https://leetcode.cn/problems/number-of-ways-to-rearrange-sticks-with-k-sticks-visible)
其他的道题也是类似的现象。
有人知道为什么吗?
Rust
==========================
impl Solution {
pub fn rearrange_sticks(n: i32, k: i32) -> i32 {
let mut f = vec![vec![0; k as usize + 1]; n as usize + 1];
let MOD = 1000000007;
for i in 1..=n as usize {
for j in 1..=k.min(i as i32) as usize {
if i == j {
f[i][j] = 1;
} else {
f[i][j] = (f[i-1][j] as i64 * (i-1) as i64 % (MOD as i64)) as i32;
if i > 1 && j > 1 {
f[i][j] += f[i-1][j-1];
f[i][j] %= MOD;
}
}
}
}
f[n as usize][k as usize]
}
}
C++
============================
class Solution {
public:
int rearrangeSticks(int n, int k) {
vector<vector<int>> f(n+1, vector<int>(k+1));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= min(i,k); j++) {
if (i == j) {
f[i][j] = 1;
} else {
f[i][j] = long(f[i-1][j]) * long(i-1) % 1000000007;
if (i > 1 && j > 1) {
f[i][j] += f[i-1][j-1];
f[i][j] %= 1000000007;
}
}
}
}
return f[n][k];
}
};
--
FROM 114.250.178.*