c# - C# - 就地修改数组,而不在内存中创建另一个数组
问题描述
在 C# 中,是否可以就地从数组中删除元素?
当然,关于从数组中删除项目的问题有很多。每个答案要么使用 List,要么使用新值创建另一个数组。但是,我想知道是否可以在 C# 中就地修改数组(删除或添加元素)。
在简单的 LeetCode 问题“Remove Duplicates from Sorted Array”中,你被限制在同一个数组中,你不能在内存中创建一个新数组(内存中的 O(1) 空间)。这可以使用 C# 吗?我想不出不创建另一个数组的解决方案。
解决方案
在 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;
}
推荐阅读
- python-3.x - 列表越界
- c++ - 在函数模板中,如何根据另一个参数确定一个参数的类型
- r - 循环以计算R中每个用户在一段时间内的事件
- c - 如何修复完美匹配和不完美匹配功能?
- flutter - 无法使用 ffmpeg 将在线 gif 转换为 mp4 视频
- python - 在 pyautogui 中同时按下键以使它们具有功能?
- php - Laminas\View\Renderer\PhpRenderer::render: 无法渲染模板
- r - 计算 R 中效果大小的所有可能配对比较
- java - 在 actionlistener 中更改布尔值
- google-kubernetes-engine - 无法将任何 Kubernetes 集群注册到 Google Anthos - “未知错误”