我正在研究学校的家庭作业问题。我需要创建2个int[]
数组。第一个数组int[10]
填充了随机integers
。第二个数组与第一个数组中的数字相同,但没有任何重复。
例如,假设我的第一个数组是1,2,2,3,1,5,5,7,9,9
。我的第二个数组将是1,2,3,5,7,9
。
有人可以指出我正确的方向来解决这个问题。
答案 0 :(得分:4)
将数字放入Set。然后从Set中检索数字。简单!重复项将自动删除!
答案 1 :(得分:2)
我会做以下(假设它是功课,你不应该做太复杂的事情)......
java.util.Arrays.sort(myArray);
对数组进行排序 - 这将对数字进行排序,并确保所有重复的数字彼此相邻。int[]
数组创建为正确的大小(从第2点开始)这足以让你朝着正确的方向前进。如果您有一些代码,如果您仍有疑问,请回复我们并询问。
答案 2 :(得分:1)
我建议使用Set,但这是一种不使用Set的方法。 (注意:这样可行,但不要问我这个效率!)
有这样的功能 -
public static boolean isNumberInArray(int[] array, int number)
{
for(int i=0; i<array.length; i++)
{
if(number == array[i])
return true;
}
return false;
}
现在在插入新数组之前使用此函数。我告诉你要弄明白那一部分。毕竟这是家庭作业!
答案 3 :(得分:0)
提示(WATTO更好地解释):
a = sorted first array
lastItem = a[0]
append lastItem into new array
for i in 1 to length(a):
if a[i] != lastItem:
append a[i] into new array
lastItem = a[i]
答案 4 :(得分:0)
@WATTO Studios有一个很好的方法。当涉及重复时,排序总是有用的。
我将建议使用哈希表的替代方法:
让我们看一个实际案例:
4 5 6 4 1 1 3
第一遍将创建下表:
1 -> 2
3 -> 1
4 -> 2
5 -> 1
6 -> 1
第二步一步一步:
4 5 6 4 1 1 3
^
4 has a counter of 2 -> remove and decrement:
1 -> 2
3 -> 1
4 -> 1
5 -> 1
6 -> 1
5 6 4 1 1 3
^
5 has a counter of 1 -> ignore
6 has a counter of 1 -> ignore
4 has a counter of 1 -> ignore
1 has a counter of 2 -> remove and decrement
1 -> 1
3 -> 1
4 -> 1
5 -> 1
6 -> 1
5 6 4 1 3
^
1 has a counter of 1 -> ignore
3 has a counter of 1 -> ignore
最终阵列:
5 6 4 1 3
当然,有更有效的方法来处理删除(因为使用数组意味着移位),例如将项目插入到链接列表中。我会让你决定的。 :)
修改:更快的方法,需要一次通过: