我不能使用除数组之外的任何东西(没有列表或其他任何东西)。
我有一个数组:[1,2,3,3,5,6,7,7,9,9]
我想进入:[1,2,3,5,6,7,9]
这是我到目前为止的代码,但它错了。我希望它显示上面的数组,但here是实际输出的屏幕截图。我哪里错了?
import java.util.*;
class arrayTest {
public static void main(String[] args) {
int[] array = new int[10];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 3;
array[4] = 5;
array[5] = 6;
array[6] = 7;
array[7] = 7;
array[8] = 9;
array[9] = 9;
Arrays.sort(array);
int count = 0;
for (int i = 0; i < array.length - 1; i++) {
if (array[i] == array[i + 1]) {
count++;
}
}
int[] newArray = new int[array.length - count];
for (int j = 1; j < newArray.length; j++) {
if (array[j] == array[j - 1]) {
newArray[j] = array[j];
} else {
newArray[j - 1] = array[j - 1];
}
}
System.out.println(count);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(newArray));
}
}
答案 0 :(得分:0)
试试这个:
public static int[] deleteDuplicates(int[] input){
int j = 0;
int i = 1;
if(input.length < 2){
return input;
}
while(i < input.length){
if(input[i] == input[j]){
i++;
}else{
input[++j] = input[i++];
}
}
int[] output = new int[j+1];
for(int k=0; k<output.length; k++){
output[k] = input[k];
}
return output;
}
<强> IDEONE DEMO 强>
答案 1 :(得分:0)
步骤
1。)排序数组
2。)删除重复项并使用count变量放入tempArray
内,这将在最后添加零。
3。)将此tempArray
的内容从index 0 to count + 1
复制到新数组中。
public static void main(String[] args) throws Exception {
int[] array = new int[10];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 3;
array[4] = 5;
array[5] = 6;
array[6] = 7;
array[7] = 7;
array[8] = 9;
array[9] = 9;
Arrays.sort(array);
int[] tempArray = new int[array.length];
int prev = array[0];
int count = 0;
tempArray[count] = array[0];
for (int i = 1; i < array.length; i++) {
if (prev != array[i]) {
count++;
tempArray[count] = array[i];
}
prev = array[i];
}
int[] finalArray = Arrays.copyOf(tempArray, count+1);// copies content from tempArray (0 to count + 1) index
System.out.println(finalArray);
}
答案 2 :(得分:0)
你的第二个for
循环应该是:
for (int i = 0, j = 0; i < array.length; i++)
if (i == 0 || array[i] != array[i - 1])
newArray[j++] = array[i];
答案 3 :(得分:0)
import java.util。*;
班级考试{
public static void main(String[] args) {
Integer[] array = new Integer[10];
StringBuffer stringBuffer = new StringBuffer();
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 3;
array[4] = 5;
array[5] = 6;
array[6] = 7;
array[7] = 7;
array[8] = 9;
array[9] = 9;
String arrayString = Arrays.toString(array);
for(int index =0 ; index <= arrayString.length(); index++){
try{
int number = Integer.parseInt(arrayString.charAt(index)+"");
if(!stringBuffer.toString().contains(number+"")){
if(stringBuffer.length()!=0)
stringBuffer.append(",");
stringBuffer.append(number);
}
}catch(Exception e){
}
}
String[] stringArray = stringBuffer.toString().split(",");
array = new Integer[stringArray.length];
for(int index = 0 ; index < stringArray.length ; index++){
array[index] = Integer.parseInt(stringArray[index]);
}
System.out.println(Arrays.toString(array));
}
}
这对您有帮助,可以查看
答案 4 :(得分:0)
试试这个:
array = IntStream.of(array).distinct().toArray();
答案 5 :(得分:0)
你有几件不同的事情发生:
我哪里错了?
if (array[j] == array[j - 1]) {
newArray[j] = array[j];
} else {
newArray[j - 1] = array[j - 1];
}
这意味着当j
和j-1
相等时,您将j-1
设置为某个内容,j
本身保持不变(默认为0
INT)...
只需将newArray[j - 1] = array[j - 1];
更改为newArray[j] = array[j - 1];
答案 6 :(得分:-1)
在您的代码中,您将array
中的值循环一个长度为newArray.length,然后array
的最后一部分将丢失。
更改
for (int j = 1; j < newArray.length; j++) {
if (array[j] == array[j - 1]) {
newArray[j] = array[j];
} else {
newArray[j - 1] = array[j - 1];
}
}
到
int index = 0;
for(int j = 0; j< array.length - 1; j++){
if(array[j] == array[j + 1]){
j++;
}
newArray[index++] = array[j];
}