【发布时间】:2017-04-10 19:29:40
【问题描述】:
我正在为我的数据结构类解决一个 Java 问题。
本质上,我们应该获取一个排序数组,从中删除所有重复项,然后将这些唯一值复制到一个新数组中。然而,具有挑战性的一点是我们只被允许遍历数组一次。我遇到的每个解决方案都需要至少遍历数组两次:一次用于“删除”重复值,另一次将唯一值复制到新数组中。
在识别唯一值的过程中,有什么方法可以将唯一值复制到新数组中?我正在用头撞墙,遇到各种 OutOfBounds 异常,试图弄清楚这一点。
我还应该提到,数组的大小被认为是给定的。
感谢阅读!
这是我目前创建新数组的代码:
public static double[] removeDuplicates (double[] list) {
int numOfUniques = numUnique(list);
if (numOfUniques == 0){
return null;
}
else if (list.length < 2){
return list;
}
int counter = 0;
double[] uniquesArray = new double[numOfUniques];
uniquesArray[0] = list[0];
for(int i = 0; i < list.length-1; i++){
if (list[i] == list[counter]){
continue;
}
else{
counter++;
uniquesArray[counter] = list[i];
}
}
return uniquesArray;
}
对于一个值为 { 10, 11, 12 } 的数组,这会返回一个值为 { 10, 11, 0 } 的数组
【问题讨论】:
-
数组的类型是什么?
-
是一个double类型的数组。
-
你可以一次完成,但最终数组大小直到完成后才知道(显然),并且在 java 中数组具有固定大小。这意味着虽然您可以一次性完成重复数据删除和复制,但最终数组必须在重复数据删除之后复制 到正确大小的数组。复制过程需要完整传递,尽管是最终值。这是允许的吗?如果不是,返回 List 是否可以接受?
-
这是有道理的。这个函数实际上链接到一个函数,该函数确定同一数组中唯一元素的数量,所以我应该能够事先创建一个正确大小的数组。我只是很难弄清楚如何将唯一值设置为新数组的正确索引。到目前为止,我已经得到了很多“几乎”,由于某种原因,新数组的最后一个或第一个索引往往为 0。
-
如果您有像
[1,1,2,2,2,3,4,5,5]这样的排序数组,您需要将第一个元素添加到新数组并记住您添加到新数组的最后一个值。如果您记住的值与排序数组中的下一个值相同,则跳过它。 Oldarray[0] = 1,newaaray[0] = 1,记住 = 1; oldarray[1] = 1, oldarray == 记住 -> 跳过它。我希望你能明白我在说什么。
标签: java arrays duplicates unique