我正在尝试解决一个问题,该问题返回一个新的双精度数组,其中包含另一个双精度数组中重复的值。我不能在此问题中使用HashSets或ArrayLists。我尝试使用一种强力方法从原始数组和我制作的新数组交换索引。但是,我没有得到预期的结果。我附上了我的代码和得到的输出的屏幕截图。如果此函数正确,则示例结果包括:new double [] {11,22,33,44,55,66,77,88} <--removeDuplicates(new double [] {11,11,11,11, 22、33、44、44、44、44、44、55、55、66、77、88、88})enter image description here
答案 0 :(得分:-2)
我已经在http://www.GeekersforGeeks.org中阅读了您的问题的解决方案。在这里,我包括了到目前为止所发现的内容。在以下代码中,在removeDuplicates函数中,创建了一个临时双精度数组,并在删除重复项之后将其用于保存新数组。
这里使用的逻辑非常简单。首先,它检查给定的数组是没有元素还是只有一个元素,如果存在,则它只是返回数组,因为没有重复。
然后它开始遍历元素,并且如果附近的两个拖曳元素不相等(意味着元素是否唯一),则这些元素将存储在新的temp []数组中。如果找到重复项,则将其忽略,并且不存储在temp []数组中。
最后,它将给定数组的最后一个元素存储到temp []数组中。
然后,它使用temp []数组修改原始数组,并返回没有重复的原始数组。
static int removeDuplicates(double arr[], int n)
{
// return the array itself, if it is empty or contains only one element
if (n==0 || n==1)
return n;
//creating a temporary array to hold new array data
double[] temp = new double[n];
// Start traversing elements
int j = 0;
for (int i=0; i<n-1; i++)
//checking for duplicates and store elements in
//temp[] array if not duplicated.
if (arr[i] != arr[i+1])
temp[j++] = arr[i];
// Store the last element as whether
// it is unique or repeated, it hasn't
// stored previously
temp[j++] = arr[n-1];
// Modify original array
for (int i=0; i<j; i++)
arr[i] = temp[i];
return j;
}