Java 如何在整数数组中查找重复项并将其删除?
我只能使用数组(没有列表或其他任何东西) 我有一个数组:[1,2,3,3,5,6,7,7,9,9] 我想变成:[1,2,3,5,6,7,9] 这是我到目前为止的代码,但它是错误的。我想让它显示上面的数组,但这是实际输出的屏幕截图。我哪里做错了Java 如何在整数数组中查找重复项并将其删除?,java,arrays,integer,duplicates,Java,Arrays,Integer,Duplicates,我只能使用数组(没有列表或其他任何东西) 我有一个数组:[1,2,3,3,5,6,7,7,9,9] 我想变成:[1,2,3,5,6,7,9] 这是我到目前为止的代码,但它是错误的。我想让它显示上面的数组,但这是实际输出的屏幕截图。我哪里做错了 import java.util.*; class arrayTest { public static void main(String[] args) { int[] array = new int[10];
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));
}
}
import java.util.*;
类阵列测试{
公共静态void main(字符串[]args){
int[]数组=新的int[10];
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
数组。排序(数组);
整数计数=0;
for(int i=0;i
试试这个:
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;
}
array = IntStream.of(array).distinct().toArray();
公共静态int[]删除重复项(int[]输入){
int j=0;
int i=1;
如果(输入长度<2){
返回输入;
}
while(i 对于代码中的(int k=0;k,您正在按长度newArray.length循环array
中的值,那么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];
}
}
for(int j=1;j
到
int索引=0;
对于(int j=0;j
步骤
1.)排序数组
2.)使用count变量删除重复项并放入tempArray
中,这将在最后放入零
3.)将此临时数组的内容从索引0复制到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);
}
publicstaticvoidmain(字符串[]args)引发异常{
int[]数组=新的int[10];
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
数组。排序(数组);
int[]tempArray=newint[array.length];
int prev=数组[0];
整数计数=0;
tempArray[count]=数组[0];
for(int i=1;i
你的第二个循环应该是:
for (int i = 0, j = 0; i < array.length; i++)
if (i == 0 || array[i] != array[i - 1])
newArray[j++] = array[i];
for(int i=0,j=0;i
导入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));
}
publicstaticvoidmain(字符串[]args){
整数[]数组=新整数[10];
StringBuffer StringBuffer=新的StringBuffer();
数组[0]=1;
数组[1]=2;
数组[2]=3;
数组[3]=3;
数组[4]=5;
数组[5]=6;
数组[6]=7;
数组[7]=7;
数组[8]=9;
数组[9]=9;
字符串arrayString=Arrays.toString(数组);
对于(int index=0;index尝试以下方法:
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;
}
array = IntStream.of(array).distinct().toArray();
你有几件不同的事情:
我哪里做错了
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));
}
}
这意味着当j
和j-1
相等时,您将j-1
设置为某个值,并且j
本身保持不变(默认情况下为0
)
只需将newArray[j-1]=array[j-1];
更改为newArray[j]=array[j-1];
为什么没有列表或任何集合?这是一个家庭作业吗?但基本思想是:创建第二个数组,在外循环中迭代第一个数组,在内循环中迭代第二个数组,只从外循环添加项(原始数组)如果内部循环(新数组)未找到该项。第二个for
循环需要两个索引计数器,一个用于源数组,一个用于目标数组,因为它们“移动”以不同的速度,即源索引总是增加,但目标索引只在新的数字上增加。仅供参考:构建源数组的更简单方法:int[]array={1,2,3,3,5,6,7,7,9,9};
Arrays.stream(array).distinct().sorted().toArray()
?这种方法很有效。我以前也得到过类似的结果,但这只是用0替换了重复项。如图所示。@ScottieJoe:-更新了我的答案。希望有帮助!如果有3个或更多重复项的序列,这将不起作用。@I如果无法使用集合API,那么为什么复杂以及复杂是什么你有简单的解决方案,请发布,其他的也可以。我们仍在寻找更简单的解决方案。查看DaDaDom在问题中的评论,了解为什么你的解决方案如此糟糕和复杂!