java - 更改/切换数组中的元素是否可以删除java中的元素(不是关于创建新对象或使用arraylist)?
问题描述
我正在尝试从 Leetcode 解决一个问题,但无法弄清楚如何解决它。我查找了解决方案,但我无法理解切换元素如何更改数组。
“给定一个排序数组 nums,就地删除重复项,使每个元素只出现一次并返回新的长度。
不要为另一个数组分配额外的空间,您必须通过使用 O(1) 额外内存就地修改输入数组来做到这一点。”
问题是关于删除重复元素,我必须修改作为参数传递的数组,这意味着我无法创建新对象。
public 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;
}
这就是解决方案所说的,我无法理解 nums[i] = nums[j] 如何减少数组的大小。
解决方案
你有正确的解决方案。客户端代码可能如下所示:
int[] nums = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
int length = removeDuplicates(nums);
// nums = { 1, 2, 3, 4, 3, 3, 4, 4, 4, 4 } <- look! we have lost 2 and have five 4!
System.out.println("Actual length of array: " + nums.length); // 10
System.out.println("Total unique numbers: " + length); // 4
System.out.print("Unique numbers:");
for (int i = 0; i < length; i++)
System.out.print(" " + nums[i]);
System.out.println();
System.out.print("The rest of array: ");
for (int i = length; i < nums.length; i++)
System.out.print(" " + nums[i]);
如您所见,数组是相同的,您无法更改它的大小。但是您可以将所有唯一元素移动到数组的开头并检索新的长度给客户端(即只有第一个length
元素是正确的并且不关心其他元素,它们可能是任何元素)。
演示:
Actual length of array: 10
Total unique numbers: 4
Unique numbers: 1 2 3 4
The rest of array: 3 3 4 4 4 4
PS你认为ArrayList
实际上是如何工作的?
public class ArrayList<E> {
Object[] elementData;
int size;
}
推荐阅读
- javascript - 如何使用javascript根据另一个数组值过滤对象数组?
- python - Selenium Xpath WebElement 文本不打印
- java - DJ Compiler 无法打开某些文件
- mysql - 如何使用 MySQL 表与时间范围进行比较
- jssor - 如何在一个 HTML 页面中添加多个 Jssor 滑块(更新 jssor 源)
- android - 列表视图从android中firebase中的实时数据库中检索一项
- javascript - 试图在数组中查找 # 重复项 - 我的函数返回 0?
- java - 将两个 JSONArray 与整数值进行比较,如果值相同,则更改该 texview 颜色
- api - 如何通过亚马逊 MWS API 发送发票?
- android - Kotlin 中的 UTC 时间错误