我正在处理学校的家庭作业问题。我需要创建 2 个int[]
数组。第一个数组int[10]
用 random 填充integers
。第二个数组与第一个数组中的数字相同,但没有任何重复。
例如,假设我的第一个数组是1,2,2,3,1,5,5,7,9,9
. 我的第二个数组将是1,2,3,5,7,9
.
有人可以指出我解决这个问题的正确方向。
我正在处理学校的家庭作业问题。我需要创建 2 个int[]
数组。第一个数组int[10]
用 random 填充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
当然,有更有效的方法来处理删除(因为使用数组意味着移位),例如将项目插入到链表中。我会让你决定的。:)
编辑:一种更快的方法,需要一次通过: