我刚刚开始编写LeetCode problmes。问题如下:给定一个排序的数组,去掉重复的元素,使每个元素只出现一次,并返回新的长度。
不要为另一个数组分配额外的空间,您必须使用常量内存在适当的位置执行此操作。
我的解决方案如下:
public static int removeDuplicates1(int[] A) {
Set<Integer> mySet = new HashSet<Integer>();
for(Integer i: A){
mySet.add(i);
}
return mySet.size();
}即使我在Eclipse中得到了正确的答案,我的答案也没有被网站接受。有人能告诉我哪里出了问题吗?
发布于 2014-08-21 16:36:13
如果数组已排序,则可以直接比较连续元素的重复项,直到找到不同的长度为止。循环完成后,可以使用数组长度属性返回新的长度。
显然,你必须在某些地方管理你的逻辑才能做到这一点。
发布于 2014-08-21 19:08:52
我试着用下面的逻辑来解决这个问题。但是它不是数组分配的地方。仍然不确定如何从具有就地逻辑的数组中删除null。
public static void main(String[] args) {
Integer[] initArray = { 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 11 };
System.out.println("Initial Array : "+ Arrays.toString(initArray));
System.out.println("Array Size After Duplicates Removal : "+ removeDuplicates(initArray));
}
public static int removeDuplicates(Integer[] arr) {
Integer prev = null;
for(int index= 0; index <= arr.length -1; index ++){
if(arr[index] == prev)
{
remove(index, arr);
prev = arr[index];
}else{
prev = arr[index];
continue;
}
}
List<Integer> items = new ArrayList<Integer>(arr.length);
for(Integer input : arr) {
if (input != null) {
items.add(input);
}
}
Integer[] outputs = items.toArray(new Integer[items.size()]);
System.out.println("Final Array : "+ Arrays.toString(outputs));
return outputs.length;
}
public static void remove(int index, Integer[] a){
int lastIndex = a.length-1;
if(index <= lastIndex){
a[index] =null;
int tmp = index;
while(tmp < lastIndex){
a[tmp] = a[tmp+1];
a[tmp+1] = null;
tmp++;
}
lastIndex--;
} else {
throw new ArrayIndexOutOfBoundsException();
}
} https://stackoverflow.com/questions/25417284
复制相似问题