[英]Create 2 arrays - 1st has random integers, 2nd has unique random integers
我正在处理学校作业。 我需要创建2个int[]
数组。 第一个数组int[10]
用随机integers
填充。 第二个数组的编号与第一个数组相同,但是没有重复。
例如,假设我的第一个数组是1,2,2,3,1,5,5,7,9,9
。 我的第二个数组将是1,2,3,5,7,9
。
有人可以指出正确的方向来解决这个问题。
将数字放入Set中 。 然后从集合中检索数字。 简单! 重复项将被自动删除!
我将执行以下操作(假设这是家庭作业,并且您不应该做任何过于复杂的事情)...
java.util.Arrays.sort(myArray);
对数组进行排序 -这将对数字进行排序,并确保所有重复的数字彼此相邻。 int[]
数组以正确的大小(从第2点开始) 这应该足以使您朝正确的方向前进。 当您有一些代码时,如果仍然有疑问,请返回我们询问。
我建议使用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;
}
现在,在插入新数组之前使用此功能。 我让你找出那部分。 毕竟是功课!
提示(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]
@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
当然,还有一些更有效的方法来处理删除操作(因为使用数组意味着移动),例如将项目插入到链表中。 我让你决定。 :)
编辑 :甚至更快的方法,只需一次通过:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.