C# - 在适当的位置修改数组,而不在内存中创建另一个数组

时间:2018-04-26 02:17:01

标签: c# arrays

在C#中,是否可以从数组中删除元素?

当然,关于从数组中删除项目有很多问题。每个答案要么使用List,要么使用新值创建另一个数组。但是,我想知道是否可以在C#中修改数组(删除或添加元素)。

在简单的LeetCode问题“从排序数组中删除重复项”中,您被限制在同一个数组中,您无法在内存中创建新数组(内存中的O(1)空间)。这可能使用C#吗?我无法想出一个不会创建另一个阵列的解决方案。

1 个答案:

答案 0 :(得分:3)

  

在C#中,是否可以从数组中删除元素?

不,根据数组的定义。数组是固定长度的。但是,您可以跟踪数组中“您关心的元素”的数量(整数),并通过将以下元素复制到其先前的索引和放大来删除元素。递减这个柜台。

然后您已经派生了Array List(.NET中的List< T>)。

  

在简单的LeetCode问题“从排序数组中删除重复项”中,您被限制在同一个数组中,您无法在内存中创建新数组(内存中的O(1)空间)。这可能使用C#吗?我无法想出一个不会创建另一个阵列的解决方案。

问题是希望您使用解决方案修改提供的数组,然后返回填充了唯一值的数组子集(从索引0开始)的长度。

此处提供了Java解决方案:https://leetcode.com/problems/remove-duplicates-from-sorted-array/solution/ - 您可以将两个字母(length更改为Length两次)以使其在C#中进行编译。

无论如何我会在这里粘贴:

int RemoveDuplicates(int[] nums) {
    if (nums.Length == 0) return 0;
    int i = 0;
    for (int j = 1; j < nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}