有点好奇,Java算得快的原因是Java带JIT而Rust只能跑debug吗?
如果想让Rust(在Leetcode/默认的debug编译模式下)获得Java的性能,又应该如何优化呢?
pub fn consume(x:String)->String{x}//尝试consume掉s以减少内存占用
pub fn can_make_pali_queries(s: String, queries: Vec<Vec<i32>>) -> Vec<bool> {
/*let vec:Vec<i32>=("a".to_string()+&Self::consume(s)).bytes().scan(1_i32,|s,x|{*s^=1<<(x-b'a');Some(*s)}).collect();
queries.into_iter().map(|x|(vec[x[1] as usize+1]^vec[x[0] as usize]).count_ones()>>1<=x[2] as u32).collect()*///这是最开始我写出来的代码
//test fastest java//这是仿照最快的Java写出来的代码
let mut result = Vec::with_capacity(queries.len());
let mut cur = 0_i32;
let mut states = Vec::with_capacity(1+s.len());
states.push(0);
for i in s.bytes(){
cur ^= (1 << (i - b'a'));
states.push(cur);
}
for i in queries{
result.push((states[i[0] as usize] ^ states[i[1]as usize+1]).count_ones()>>1<=i[2]as u32);
}
result
}
1
共 7 条评论, 1 页
评论区
写评论你这么说或许有道理
但Rust的编译时间也没被算进去啊(……)
总不能Rust启动耗时20ms吧
--
👇
lithbitren: leetcode的java不会把jvm的启动时间算进去,有时候能比c/c++还快,时间仅供参考吧
Rust经常0ms ——本地测也是一样
小于500us的都算0ms,这么想自然相信LeetCode结论的
--
👇
pader: LeetCode 有时候跑出来还是 0ms 呢,你信吗?
LeetCode 有时候跑出来还是 0ms 呢,你信吗?
leetcode的java不会把jvm的启动时间算进去,有时候能比c/c++还快,时间仅供参考吧
不要迷信leetcode的时间,用合理的做法做出来就好了
学到了
果然是release
所以……为啥Java代码可以跑22ms而Rust就只能48ms了呢?
是我写得有问题吗?
--
👇
Zhanghailin1995: leetcode 的rust好像是以release模式编译的,我在知乎上看张汉东老师这么说的
leetcode 的rust好像是以release模式编译的,我在知乎上看张汉东老师这么说的