Remove元素在leetcode中不起作用,但在VS中起作用



简而言之,我正在为leetcode问题27"移除元素"制定解决方案。当我运行它时,它不起作用,值完全错误,但我真的很困惑为什么它不起,所以我在VS中测试了它,它在那里完全正常。真是令人困惑。

任务:

给定一个整数数组nums和一个整数val,在nums中删除所有出现的val。元素的顺序可以改变。然后返回nums中不等于值的元素数。

考虑nums中不等于val的元素数量为k,要被接受,您需要做以下事情:

更改数组nums,使nums的前k个元素包含不等于val的元素。nums的其余元素与nums的大小一样不重要。返回k.

这是我正在使用的代码:

public class Leet
{
static public int LeetCode(int[] nums, int val)
{
int k;
List<int> list = new();
foreach (var number in nums)
{
if (number != val)
{
list.Add(number);
}
}
k = list.Count();
return k;
}
}

我复制了相同的测试输入,一个包含[3,2,3]的数组作为numval为3。在VS中,输出为[2,2]。在leetcode中,它正在返回[3,2]。

怎么回事?真的很困惑。

好吧,您被要求修改数组

更改数组nums,使nums的第一个k元素。。。

而你却不这么做;由于返回k,您已部分完成任务。LeetCode期待这样的东西:

static public int LeetCode(int[] nums, int val) {
int result = 0; 
for (int left = 0, right = 0; right < nums.Length; ++right) 
if (nums[right] != val) {
result += 1;
nums[left++] = nums[right];
}

return result;
}

请注意就地条件:即使它没有经过测试(您可以声明List<int>并通过所有测试),也不应该这样做。

时间复杂性:O(n)空间复杂度:O(1)

相关内容

最新更新