Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在排序的java数组中重复_Java_Arrays_Sorting_Duplicates - Fatal编程技术网

在排序的java数组中重复

在排序的java数组中重复,java,arrays,sorting,duplicates,Java,Arrays,Sorting,Duplicates,我必须写一个方法,它接受一个已经按数字顺序排序的整数数组,然后删除所有重复的数字并返回一个只包含没有重复的数字的数组。然后必须打印出该数组,这样我就不会有任何空指针异常。方法必须在O(n)时间内,不能使用向量或散列。这是我到目前为止所做的,但它只按顺序排列了前几对数字,没有重复项,然后将重复项放在数组的后面。我无法创建临时数组,因为它给我空指针异常 public static int[] noDups(int[] myArray) { int j = 0; for (int i

我必须写一个方法,它接受一个已经按数字顺序排序的整数数组,然后删除所有重复的数字并返回一个只包含没有重复的数字的数组。然后必须打印出该数组,这样我就不会有任何空指针异常。方法必须在O(n)时间内,不能使用向量或散列。这是我到目前为止所做的,但它只按顺序排列了前几对数字,没有重复项,然后将重复项放在数组的后面。我无法创建临时数组,因为它给我空指针异常

public static int[] noDups(int[] myArray) {
    int j = 0;
    for (int i = 1; i < myArray.length; i++) {
        if (myArray[i] != myArray[j]) {
            j++;
            myArray[j] = myArray[i];
        }
    }
    return myArray;
}
公共静态int[]节点(int[]myArray){
int j=0;
for(int i=1;i
既然这似乎是家庭作业,我不想给你确切的代码,但下面是要做的:

  • 对数组进行第一次遍历,以查看有多少重复项
  • 创建新的大小数组(oldSize-重复)
  • 对数组执行另一次运行,以将唯一值放入新数组中
由于数组已排序,您只需检查数组[n]==数组[n+1]即可。如果不是,那么它就不是复制品。检查n+1时,请注意数组边界


编辑:因为这涉及到两次运行,它将在O(2n)->O(n)时间内运行。

因为这似乎是家庭作业,我不想给你确切的代码,但下面是要做的:

  • 对数组进行第一次遍历,以查看有多少重复项
  • 创建新的大小数组(oldSize-重复)
  • 对数组执行另一次运行,以将唯一值放入新数组中
由于数组已排序,您只需检查数组[n]==数组[n+1]即可。如果不是,那么它就不是复制品。检查n+1时,请注意数组边界


编辑:因为这涉及到两次运行,所以它将在O(2n)->O(n)时间内运行。

不创建新数组肯定会导致整个初始数组都为空。因此,创建一个新数组来存储来自初始数组的唯一值

如何检查唯一值?这是伪代码

uniq = null
loop(1..arraysize)      
  if (array[current] == uniq)  skip
  else  store array[current] in next free index of new array; uniq = array[current]
end loop
正如其他人提到的,通过对数组进行初始扫描来获得数组大小

uniq = null
count = 0
loop(1..arraysize)      
  if (array[current] == uniq)  skip
  else  uniq = array[current] and count++
end loop
create new array of size count

不创建新数组肯定会导致整个初始数组都为空。因此,创建一个新数组来存储来自初始数组的唯一值

如何检查唯一值?这是伪代码

uniq = null
loop(1..arraysize)      
  if (array[current] == uniq)  skip
  else  store array[current] in next free index of new array; uniq = array[current]
end loop
正如其他人提到的,通过对数组进行初始扫描来获得数组大小

uniq = null
count = 0
loop(1..arraysize)      
  if (array[current] == uniq)  skip
  else  uniq = array[current] and count++
end loop
create new array of size count
公共静态int[]findDups(int[]myArray){
int numodups=0;
for(int i=0;i
公共静态int[]findDups(int[]myArray){
int numodups=0;
for(int i=0;i
经过测试并正常工作(假设阵列已经订购)

公共静态int[]noDups(int[]myArray){
int dups=0;//表示重复数的数目
for(int i=1;i

针对此问题,我使用了一个
整数
列表
测试并运行(假设阵列已订购)

public int[] noDups(int[] arr){

    int j = 0;
    // copy the items without the dups to res
    int[] res = new int[arr.length];
    for(int i=0; i<arr.length-2; i++){
        if(arr[i] != arr[i+1]){
            res[j] = arr[i];
            j++;
        }
    }
    // copy the last element
    res[j]=arr[arr.length-1];
    j++;
    // now move the result into a compact array (exact size)
    int[] ans = new int[j];
    for(int i=0; i<j; i++){
        ans[i] = res[i];
    }
    return ans;
}
公共静态int[]noDups(int[]myArray){
int dups=0;//表示重复数的数目
for(int i=1;i