首页 > 解决方案 > C# - 就地修改数组,而不在内存中创建另一个数组

问题描述

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

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

在简单的 LeetCode 问题“Remove Duplicates from Sorted Array”中,你被限制在同一个数组中,你不能在内存中创建一个新数组(内存中的 O(1) 空间)。这可以使用 C# 吗?我想不出不创建另一个数组的解决方案。

标签: c#arrays

解决方案


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

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

然后,您将派生一个数组列表(.NET 中的 List<T>)。

在简单的 LeetCode 问题“Remove Duplicates from Sorted Array”中,你被限制在同一个数组中,你不能在内存中创建一个新数组(内存中的 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;
}

推荐阅读