在排序的java数组中重复
我必须写一个方法,它接受一个已经按数字顺序排序的整数数组,然后删除所有重复的数字并返回一个只包含没有重复的数字的数组。然后必须打印出该数组,这样我就不会有任何空指针异常。方法必须在O(n)时间内,不能使用向量或散列。这是我到目前为止所做的,但它只按顺序排列了前几对数字,没有重复项,然后将重复项放在数组的后面。我无法创建临时数组,因为它给我空指针异常在排序的java数组中重复,java,arrays,sorting,duplicates,Java,Arrays,Sorting,Duplicates,我必须写一个方法,它接受一个已经按数字顺序排序的整数数组,然后删除所有重复的数字并返回一个只包含没有重复的数字的数组。然后必须打印出该数组,这样我就不会有任何空指针异常。方法必须在O(n)时间内,不能使用向量或散列。这是我到目前为止所做的,但它只按顺序排列了前几对数字,没有重复项,然后将重复项放在数组的后面。我无法创建临时数组,因为它给我空指针异常 public static int[] noDups(int[] myArray) { int j = 0; for (int i
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-重复)
- 对数组执行另一次运行,以将唯一值放入新数组中
编辑:因为这涉及到两次运行,它将在O(2n)->O(n)时间内运行。因为这似乎是家庭作业,我不想给你确切的代码,但下面是要做的:
- 对数组进行第一次遍历,以查看有多少重复项
- 创建新的大小数组(oldSize-重复)
- 对数组执行另一次运行,以将唯一值放入新数组中
编辑:因为这涉及到两次运行,所以它将在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