< 返回版块

Neutron3529 发表于 2020-06-24 12:10

有点好奇,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
    }

评论区

写评论
作者 Neutron3529 2020-06-29 02:01

你这么说或许有道理

但Rust的编译时间也没被算进去啊(……)

总不能Rust启动耗时20ms吧

--
👇
lithbitren: leetcode的java不会把jvm的启动时间算进去,有时候能比c/c++还快,时间仅供参考吧

作者 Neutron3529 2020-06-29 02:00

Rust经常0ms ——本地测也是一样

小于500us的都算0ms,这么想自然相信LeetCode结论的

--
👇
pader: LeetCode 有时候跑出来还是 0ms 呢,你信吗?

pader 2020-06-27 16:21

LeetCode 有时候跑出来还是 0ms 呢,你信吗?

lithbitren 2020-06-25 19:35

leetcode的java不会把jvm的启动时间算进去,有时候能比c/c++还快,时间仅供参考吧

liangyongrui 2020-06-24 15:46

不要迷信leetcode的时间,用合理的做法做出来就好了

作者 Neutron3529 2020-06-24 14:54

学到了

果然是release

extern crate rand;
use rand::prelude::*;
……
        let mut x: u8 = random();
        for i in 0..15{
            x=x+random::<u8>();//debug模式下会因为溢出而报错
            println!("{}",&x);
        }

所以……为啥Java代码可以跑22ms而Rust就只能48ms了呢?

是我写得有问题吗?

--
👇
Zhanghailin1995: leetcode 的rust好像是以release模式编译的,我在知乎上看张汉东老师这么说的

Zhanghailin1995 2020-06-24 14:13

leetcode 的rust好像是以release模式编译的,我在知乎上看张汉东老师这么说的

1 共 7 条评论, 1 页