简而言之,我正在为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]的数组作为num
,val
为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)