本人是刚从C++转过来的newbie,今天在LeetCode刷了道题,分别用C++和Rust以相同思路实现,得到的结果根本不是一个数量级的,求大佬帮我分析一下原因,不胜感激。
平均数据如下:
语言 耗时(ms) 内存(MB)
C++ 300 177
Rust 35 4.2
题目链接:2766. 重新放置石块
C++实现
class Solution {
public:
vector<int> relocateMarbles(vector<int>& nums, vector<int>& moveFrom, vector<int>& moveTo) {
std::unordered_set<int> unique_set;
for (auto &item : nums) {
unique_set.insert(item);
}
for (size_t i = 0; i < moveFrom.size(); i++) {
unique_set.erase(moveFrom[i]);
unique_set.insert(moveTo[i]);
}
vector<int> result;
for (auto &item : unique_set)
result.push_back(item);
sort(result.begin(), result.end());
return result;
}
};
Rust实现
use std::collections::HashSet;
impl Solution {
pub fn relocate_marbles(nums: Vec<i32>, move_from: Vec<i32>, move_to: Vec<i32>) -> Vec<i32> {
let mut unique_set:HashSet<i32> = nums.into_iter().collect();
for i in 0..move_from.len() {
unique_set.remove(&move_from[i]);
unique_set.insert(move_to[i]);
}
let mut result = Vec::new();
for iter in unique_set {
result.push(iter);
}
result.sort();
result
}
}
评论区
写评论也许是Rust有后发优势,标准库算法普遍优于STL?