我有一个问题:
对象显示给定一个排序数组,删除重复的元素,使每个元素只出现一次,并返回新的长度。不要为另一个数组分配额外的空间,必须在内存不变的情况下这样做。例如,给定输入数组Nums=[1,1,2],你的函数应该返回长度=2,Nums的前两个元素分别为1和2。你在新的长度之外留下什么并不重要。
我使用HashSet来回答这个问题,但结果总是显示[1,1]。我想不出来有人能帮我知道问题出在哪里吗?
我的代码:
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
Set<Integer> numset = new HashSet<>();
for(int i:nums){
numset.add(i);
}
return numset.size();
}
}
您的输入[1,1,2]您的答案[1,1]预期答案[1,2]
使用额外的数据结构也违反了您提到的规则,即不为其分配额外空间。现在,由于数组已经排序,下面的代码可以正常工作。
int solution(int[] nums) {
int size = nums.length;
if (size == 0 || size == 1) {
return size;
}
int next = 0;
for (int i = 0; i < size - 1; i++) {
if (nums[i] != nums[i + 1]) {
nums[next++] = nums[i];
}
}
nums[next++] = nums[size - 1];
return next;
}
在上面的代码中,我们只是维护了一个额外的索引(next),以便只跟踪唯一的元素,并通过覆盖非唯一的元素将它们移动到前面。
因此,对于最坏情况时间复杂度为O(n)的问题,这里有一个简单的就地解决方案。
public int removeDuplicates(int[] nums){
int length = nums.length;
int index = 0;
for(int i = 0; i < length - 1; i++){
if(nums[i] == nums[i+1]){
nums[index++] = nums[i];
}
}
// this is needed because upper for loop runs until i equals to length-2
// in order to avoid ArrayOutOfBoundException
nums[index++] = nums[length-1];
// for displaying the unique array
/*
for(int i = 0; i < index; i++){
System.out.println(nums[i]);
}
*/
return index;
}
假设你有一个排序数组:
int[] nums = { 1, 2, 2, 2, 4, 5, 5, 5, 7, 7, 8 };
... walk through nums, at some read position check for being a duplicate,
... (otherwise) write it compact at the write position
... return new length
覆盖nums。
因为我不想破坏编码的任何满足感,请便...
策略:在纸上解决问题。
问题内容: 我使用下面的代码行遍历数据库中的一个表: 如果我打印出数组: 我会得到这个: 但是我想摆脱数组中的重复项,所以我使用 我得到下面的奇怪结果,这不是我想要的结果: 理想情况下,我认为它应该返回以下内容: 我该怎么做才能正确处理?我使用了错误的PHP语法/默认功能吗? 问题答案: 该功能将为您完成此操作。您只需要添加标志:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1,2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nu
问题内容: 我有一个未排序的整数数组,其值的范围从Integer.MIN_VALUE到Integer.MAX_VALUE。数组中可以有任意整数的多个重复项。我需要返回一个删除了所有重复项的数组,并且还需要保持元素的顺序。 例: 输出应为{7,8,1,9,0,2} 我知道可以使用解决此问题,但我需要一个不占用大量缓冲区空间的解决方案。 问题答案: 您可以使用Java 8 Arrays 方法从数组中获
问题内容: 我应该读一个包含许多不同电子邮件地址的文件,并使用数组将它们打印出来。问题是我需要消除重复的电子邮件。 我能够尝试/捕捉并打印出电子邮件地址。但是,我不确定如何删除重复项。我对散列码或如何使用Set尚不了解。任何援助将不胜感激。 这是我到目前为止的内容: 问题答案: 简单的解决方案是使用Set Java, 因此设置自动删除重复值 并且在你的代码中你拥有数组,而不是将转换数组直接使用代码
这是我的数据: 使用Lodash,我如何删除具有重复id键的对象?有过滤器,地图和独特的东西,但不太确定。 我的真实数据集要大得多,有更多的键,但概念应该是一样的。
我有一个问题编码这个: 编写一个名为的静态方法,该方法将整数数组作为输入,并返回一个新的整数数组,其中所有重复项都被删除。例如,如果输入数组具有元素{4,3,3,4,5,2,4},则结果数组应为{4,3,5,2} 这是我目前所做的