Leetcode 27.移除元素

起因

昨天把年前学C++在LeetCode刷算法的一题,改为C#和Rust,并进行了简单对比,今天午饭后,便把另外一题改为C#和Rust.
LeetCode 27移除元素,C++/C#/Rust性能对比

C++代码

int removeElement(vector<int>& nums, int val) {
	//assert(nums.size() > 0);
	int k = 0, size = nums.size();
	for (int i = 0; i < size; ++i) {
		if (nums[i] != val) {
			nums[k++] = nums[i];
		}
	}
	return k;
}

C#代码

public int RemoveElement(int[] nums, int val)
{
    int k = 0, size = nums.Length;
    for (int i = 0; i < size; ++i)
    {
        if (nums[i] != val)
        {
            nums[k++] = nums[i];
        }
    }
    return k;
}

Rust代码

pub fn remove_element(nums: &mut Vec<i32>, val: i32) -> i32 {
    let mut k: usize = 0;
    let size = nums.len();
    let mut i: usize = 0;
    while i < size {
        if nums[i] != val {
            nums[k] = nums[i];
            k += 1;
        }
        i += 1;
    }

    return k as i32;
}

C#(.Net)在对比中,依然还是垫底的,是因为C#有JIT(没有预热).看看结果就行了.

秋风 2021-05-25