繁体   English   中英

创建2个数组-第一个具有随机整数,第二个具有唯一的随机整数

[英]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中 然后从集合中检索数字。 简单! 重复项将被自动删除!

我将执行以下操作(假设这是家庭作业,并且您不应该做任何过于复杂的事情)...

  1. 使用java.util.Arrays.sort(myArray);对数组进行排序 -这将对数字进行排序,并确保所有重复的数字彼此相邻。
  2. 遍历数组并保留唯一数字的计数(即,将当前数字与下一个数字进行比较-如果它们不同,则将计数器加1)
  3. 创建第二个int[]数组以正确的大小(从第2点开始)
  4. 重复与点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有一个很好的方法。 当涉及重复项时,排序总是很有用的。

我将建议使用哈希表的另一种方法:

  1. 创建一个哈希结构,将整数作为键(原始数组中的数字),并将计数器作为值。
  2. 遍历原始数组,对于遇到的每个数字,它都是哈希表中对应的计数器值。
  3. 再次遍历原始数组。 对于每个数字,请检查哈希表。 如果关联的计数器大于1,则删除该值并递减计数器。

让我们看一个实际的案例:

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

当然,还有一些更有效的方法来处理删除操作(因为使用数组意味着移动),例如将项目插入到链表中。 我让你决定。 :)

编辑 :甚至更快的方法,只需一次通过:

  1. 使用与上述相同的哈希结构。
  2. 遍历原始数组。 对于每个项目,请检查表格。 如果关联的计数器为0,则将其递增为1。如果已经为1,则删除该项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM